我尝试将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。
JNATest \应用\库\ jna.jar
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的新手,所以可能会误解一些关键点。
答案 0 :(得分:7)
将.so文件放在以下目录中(使用android studio时):yourproject\app\src\main\jniLibs\armeabi-v7a\libjnidispatch.so
更新:由于你们中的一些人询问在哪里找到* .so文件:
在official JNA site上,您将找到所有支持的架构(30+)供下载:
https://github.com/java-native-access/jna/tree/master/lib/native
下载您喜欢的架构的jar并使用一些zip工具打开它。在那里你可以找到libjnidispatch.so文件(当然只适用于unix架构。对于windows来说它是一个dll)
答案 1 :(得分:1)
我在库github repo的文件中找到了这条评论 - “If you're using Google's Eclipse plugin then you must manually remove libjnidispatch.so from jna.jar/lib/armeabi and add it into your project's libs/armeabi directory.”
由于此文件是在2012年创建的,而Android Studio仍然处于非常早期的阶段,并且当时还不是非常受欢迎,我认为它可能是Eclipse和Android Studio的有效说明。我建议你试一试。
答案 2 :(得分:0)
对于Android,请参考JNA库,在字符串末尾添加@aar,而不是下载JNA jar:
https://github.com/java-native-access/jna/blob/master/www/FrequentlyAskedQuestions.md#jna-on-android