我在我的应用程序中结合使用Unity和自定义NDK库。 我的问题是,如果我尝试启动托管Unity的活动,则该过程始终崩溃并显示以下消息:
E /团结:无法找到主力
和Unity的AlertBox:
标题:无法初始化!
消息:您的硬件不支持此应用程序
经过一番尝试之后,我得到了必须在gradle文件中添加以下内容的解决方案:
android{
...
defaultConfig{
...
ndk {
abiFilters 'armeabi-v7a', 'x86'
}
}
...
}
完成此操作后,Unity会正常运行,但是当我启动包含我自己的NDK库的Activity时,它会因错误而崩溃。
Caused by: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/de.biosign.daimlerhrv-2/base.apk", zip file "/data/app/de.biosign.daimlerhrv-2/split_lib_dependencies_apk.apk", zip file "/data/app/de.biosign.daimlerhrv-2/split_lib_slice_0_apk.apk", zip file "/data/app/de.biosign.daimlerhrv-2/split_lib_slice_1_apk.apk", zip file "/data/app/de.biosign.daimlerhrv-2/split_lib_slice_2_apk.apk", zip file "/data/app/de.biosign.daimlerhrv-2/split_lib_slice_3_apk.apk", zip file "/data/app/de.biosign.daimlerhrv-2/split_lib_slice_4_apk.apk", zip file "/data/app/de.biosign.daimlerhrv-2/split_lib_slice_5_apk.apk", zip file "/data/app/de.biosign.daimlerhrv-2/split_lib_slice_6_apk.apk", zip file "/data/app/de.biosign.daimlerhrv-2/split_lib_slice_7_apk.apk", zip file "/data/app/de.biosign.daimlerhrv-2/split_lib_slice_8_apk.apk", zip file "/data/app/de.biosign.daimlerhrv-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/de.biosign.daimlerhrv-2/lib/arm64, /system/lib64, /vendor/lib64, /system/vendor/lib64]]] couldn't find "libMyLib.so"
at java.lang.Runtime.loadLibrary0(Runtime.java:972)
at java.lang.System.loadLibrary(System.java:1530)
at de.biosign.sessioncomponents.session.RunningSession.<clinit>(RunningSession.java:34)
at de.biosign.mvc.session.sessionController.SessionController.<init>(SessionController.java:63)
at de.biosign.biofeedbackunity.BiofeedbackUnity.onCreate(BiofeedbackUnity.java:109)
at android.app.Activity.performCreate(Activity.java:6666)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2677)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6251)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
有人能解决这个问题吗?可以给我一个提示。
谢谢
答案 0 :(得分:1)
根据您的错误日志
原因:java.lang.UnsatisfiedLinkError:...... / system / lib64,/ vendor / lib64,/ system / vendor / lib64
您的设备看起来是64位的。但是您的abiFilters 'armeabi-v7a', 'x86'
仅适用于32位。
因此,可能的解决方法如下:在abiFilters
中添加64位ABI:
abiFilters 'armeabi-v7a', 'x86', 'arm64-v8a', 'x86_64'
反复检查:
答案 1 :(得分:0)
对我来说,解决方案是将以下内容添加到我的Android.mk中: (另请参见https://developer.android.com/ndk/guides/android_mk)
TARGET_ARCH : armeabi-v7a x86
因此我的库就为此架构生成,并再次在Unity旁边运行, 根据一些帖子,2017.4以上的更高版本的Unity已经支持64位,但是对于我的工作,我使用的是5.6,因此可以使用它。
对于使用2017.4或更高版本的用户,有以下链接: https://developer.android.com/distribute/best-practices/develop/64-bit#unity_developers