[英]Setting up JNA in Android Studio
我嘗試將 jna.jar 導入到我的項目中,因為JNA是調用基於 JNI 的本機庫的非常有用的工具。
操作系統:Windows 10
IDE:Android Studio 1.5.1
JDK:1.8.0_73
NDK:r10e
我所做的(AS = Android Studio)
使用 API18 由 AS 創建一個新項目。
從他們的 GitHub 下載 jna.jar。
JNATest\\app\\libs\\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 的新手,所以可能誤解了一些關鍵點。
將.so文件放在以下目錄(使用android studio時): yourproject\\app\\src\\main\\jniLibs\\armeabi-v7a\\libjnidispatch.so
更新我:(直到版本 <= 4.3.0)因為你們中的一些人問在哪里可以找到 *.so 文件:
在官方 JNA 站點上,您可以找到所有支持的架構(30+)以供下載:
https://github.com/java-native-access/jna/tree/master/lib/native
下載您喜歡的架構的 jar 並使用一些 zip 工具打開它。 在那里你會找到 libjnidispatch.so 文件(當然只適用於 unix 架構。對於 Windows,它是一個 dll)
更新二:(從版本 >= 4.4.0 開始)
使用 JNA 項目提供的 jna-XX0.aar 文件
正如評論中提到的 - 從4.4.0版開始, JNA 將 AAR 發布到 maven 中心,其中包含所有 libjnidispatch.so。 在這里,用戶使用 gradle 比直接使用 Maven 有更好的運氣,它並不總是選擇或正確處理 aars。
對於 Android,參考 JNA 庫在字符串末尾添加 @aar 而不是下載 JNA jar:
https://github.com/java-native-access/jna/blob/master/www/FrequentlyAskedQuestions.md#jna-on-android
我在庫 github 存儲庫中的一個文件中發現了此評論-“ 如果您使用的是 Google 的 Eclipse 插件,那么您必須手動從 jna.jar/lib/armeabi 中刪除 libjnidispatch.so 並將其添加到您項目的 libs/armeabi 目錄中。 ”
由於這個文件是在 2012 年創建的,而且 Android Studio 還處於非常早期的階段並且當時還不是非常流行,我認為它可能是 Eclipse 和 Android Studio 的有效說明。 我建議你試試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.