E / Unity:找不到主

时间:2019-03-01 01:34:37

标签: android unity3d android-ndk

我在我的应用程序中结合使用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)

有人能解决这个问题吗?可以给我一个提示。

谢谢

2 个答案:

答案 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