[英]UnsatisfiedLinkError on Android 5.0 Lollipop
我通過以下方式加載本機庫:
try {
System.loadLibrary("myNative");
} catch (UnsatisfiedLinkError e) {
//java.lang.UnsatisfiedLinkError here
System.load("/data/data/com.my.app/my_native/libmyNative.so");
}
上面的代碼在Android 5.0 Lollipop以外的其他設備上都可以正常工作。 在Android 5.0 Lollipop設備上運行時,我不斷收到以下錯誤:
java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/com.my.app/my_native/libmyNative.so" is 32-bit instead of 64-bit
at java.lang.Runtime.load(Runtime.java:331)
at java.lang.System.load(System.java:982)
如何解決這個問題呢?
===更新====
我將本機庫從lib/<archType>/libmyNative.so
到/data/data/com.my.app/my_native/libmyNative.so
,然后使用上面的代碼加載該庫。
看來,打包您的庫的某些方式(將它們從lib/<archType>/libmyNative.so
到/data/data/com.my.app/my_native/libmyNative.so
)會使安裝程序感到困惑。 安裝APK時,它應該已經自動提取了正確的arch類型的庫並將它們提供給System.loadLibrary
您無需手動將任何內容復制到自定義目錄(如my_native
。
在這種情況下, <archType>
是現有的之一( armeabi
, armeabi-v7a
等)還是您自己的東西? 如果不是標准程序之一,則安裝程序將不知道您的應用程序包含32位本機代碼,因此將以首選模式(64位)啟動應用程序的進程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.