[英]Android java.lang.UnsatisfiedLinkError with native library
[英]Running android native code is causing java.lang.UnsatisfiedLinkError
我有一個帶有本機代碼的Android應用程序,我使用openCV庫。 在手機中運行應用程序時一切正常,但是當我嘗試在平板電腦上運行它時(聯想yoga 2 pro)我遇到了這個錯誤:
01-03 11:53:13.007: E/AndroidRuntime(25632): FATAL EXCEPTION: main
01-03 11:53:13.007: E/AndroidRuntime(25632): Process: <appname>, PID: 25632
01-03 11:53:13.007: E/AndroidRuntime(25632): java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app-lib/<appname>/libnative_module.so" has unexpected e_machine: 40
01-03 11:53:13.007: E/AndroidRuntime(25632): at java.lang.Runtime.loadLibrary(Runtime.java:364)
01-03 11:53:13.007: E/AndroidRuntime(25632): at java.lang.System.loadLibrary(System.java:526)
01-03 11:53:13.007: E/AndroidRuntime(25632): at <appname>.SplashActivity$1.onManagerConnected(SplashActivity.java:35)
01-03 11:53:13.007: E/AndroidRuntime(25632): at org.opencv.android.AsyncServiceHelper$1.onServiceConnected(AsyncServiceHelper.java:318)
01-03 11:53:13.007: E/AndroidRuntime(25632): at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1127)
01-03 11:53:13.007: E/AndroidRuntime(25632): at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1144)
01-03 11:53:13.007: E/AndroidRuntime(25632): at android.os.Handler.handleCallback(Handler.java:733)
01-03 11:53:13.007: E/AndroidRuntime(25632): at android.os.Handler.dispatchMessage(Handler.java:95)
01-03 11:53:13.007: E/AndroidRuntime(25632): at android.os.Looper.loop(Looper.java:149)
01-03 11:53:13.007: E/AndroidRuntime(25632): at android.app.ActivityThread.main(ActivityThread.java:5283)
01-03 11:53:13.007: E/AndroidRuntime(25632): at java.lang.reflect.Method.invokeNative(Native Method)
01-03 11:53:13.007: E/AndroidRuntime(25632): at java.lang.reflect.Method.invoke(Method.java:515)
01-03 11:53:13.007: E/AndroidRuntime(25632): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
01-03 11:53:13.007: E/AndroidRuntime(25632): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641)
01-03 11:53:13.007: E/AndroidRuntime(25632): at dalvik.system.NativeStart.main(Native Method)
這是在SplashActivity的第45行:
System.loadLibrary("native_module");
有人可以幫我解決這個錯誤嗎? 或者我做錯了什么?
您的平板電腦基於Intel Atom CPU。 您必須為APP_ABI=x86
構建native_module 。 請注意,您還需要兼容版本的OpenCV。
更新:在這種特殊情況下,該應用程序是為x86和ARM構建的。 但是app安裝程序選擇了錯誤的子文件夾,可能是因為libs/x86
和libs/armeabi
列出的文件名不完全匹配 。 對於具有非平凡原生組件的應用,可靠而有效的方法是將單獨的APK上傳到PlayStore 。
我有一個華碩Zenfone 5(使用x86 ABI),我遇到了同樣的問題。 顯然問題出在OpenCV 2.x版本上。 開始使用OpenCV 3.x版本,問題將得到解決。
OpenCV 3.x版本有更多ABI選項,例如:
arm64v8a
arm
armv7a
mips
mips64
x86
x86-64
你可以在這里找到3.x版本。
希望它有所幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.