【发布时间】:2016-07-18 06:49:29
【问题描述】:
我尝试将 jna.jar 导入到我的项目中,因为 JNA 是一个非常有用的工具,可以调用基于 JNI 的 Native 库。
操作系统:Windows 10
IDE:Android Studio 1.5.1
JDK:1.8.0_73
NDK:r10e
我做了什么 (AS = Android Studio)
AS 使用 API18 创建一个新项目。
-
从他们的 GitHub 下载 jna.jar。
- 将 jna.jar 复制到项目文件夹中。
JNATest\app\libs\jna.jar
- 在AS中,右键单击jna.jar的图标,选择添加为库
- 等待几秒钟,检查文件->项目结构->应用程序->依赖项。我们确实有 jna.jar。 (与 app\build.gradle 相同) build gradle
- 在MainActivity.java中实现JNA的JAVA代码
- 在真实设备 Sony Z3 (arm) 上运行应用程序
-
CLibrary.Instance.printf("Hello, JNA");崩溃
Android 监视器上的错误消息
E/AndroidRuntime: FATAL EXCEPTION: main
Process: i3d.jnatest, PID: 1068
java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/android-arm/libjnidispatch.so) not found in resource path (.)
at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:866)
at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:826)
at com.sun.jna.Native.<clinit>(Native.java:140)
..
... so on
Java 代码
package i3d.jnatest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.sun.jna.Library;
import com.sun.jna.Native;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CLibrary.Instance.printf("Hello, JNA");
}
public interface CLibrary extends Library
{
CLibrary Instance = (CLibrary) Native.loadLibrary("msvcrt", CLibrary.class);
void printf(String format, Object... args);
}
}
问题
根据错误信息,我在运行时错过了/android-arm/libjnidispatch.so。
我是不是把 jna.jar 放错地方了?
我应该如何获取和使用
/android-arm/libjnidispatch.so?
我是 Android Studio 的新手,所以可能误解了一些关键点。
【问题讨论】:
-
您使用了哪个 JNA.jar 文件?我尝试了 4.1.0 和 4.2.2,但仍然为 android 构建错误
-
我也面临同样的问题..你有什么解决办法吗?
标签: android jar android-ndk jna