没有找到 void com.unity3d.player.UnityPlayer.nativeRestartActivityIndi​​cator() 的实现

Posted

技术标签:

【中文标题】没有找到 void com.unity3d.player.UnityPlayer.nativeRestartActivityIndi​​cator() 的实现【英文标题】:No implementation found for void com.unity3d.player.UnityPlayer.nativeRestartActivityIndicator() 【发布时间】:2019-01-28 06:09:57 【问题描述】:

我是 Unity 新手,我正在尝试将 Unity 游戏(它具有 ARcore)集成到原生 android 应用程序中。

我能够在新的 HelloWorld 应用中启动 unity,但无法在我的真实应用(具有其他模块)中启动。

注意:当我从 Unity 项目构建一个 android 库时,我包括 armeabi-v7a 和 x86 架构。

java.lang.UnsatisfiedLinkError: No implementation found for void com.unity3d.player.UnityPlayer.nativeRestartActivityIndicator() (tried Java_com_unity3d_player_UnityPlayer_nativeRestartActivityIndicator and Java_com_unity3d_player_UnityPlayer_nativeRestartActivityIndicator__)
        at com.unity3d.player.UnityPlayer.nativeRestartActivityIndicator(Native Method)
        at com.unity3d.player.UnityPlayer.resume(Unknown Source:37)
        at com.rccl.soakTest.UnityPlayerActivity.onResume(UnityPlayerActivity.java:58)
        at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1361)
        at android.app.Activity.performResume(Activity.java:7344)
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3763)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3828)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3036)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6938)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

在以下设备上测试: SamsungS8 (Oreo), Emulator-Nexus 6(Oreo)

【问题讨论】:

找到任何解决方案?? 【参考方案1】:

如果你导出build.gradle中的unity项目,需要在你的android项目app.gradle中加入这句话:

defaultConfig 
    ndk 
        abiFilters 'armeabi-v7a', 'x86'
    

【讨论】:

【参考方案2】:

尝试启用 ARM64

    统一更新到2018.3 在 android 播放器设置中将“脚本后端”更改为 IL2CPP。 在 android 播放器设置中将 ARM64 复选框标记为选中。

【讨论】:

是的,您是对的,将“脚本后端”更改为 IL2CPP 将生成 ARM64,但您的 Unity 项目中的所有 SDK 都应将其支持扩展到 ARM64,以便 Unity 生成这些文件。【参考方案3】:

我终于知道了这个问题的原因,

问题:它正在寻找 ARM-64 架构的 JNI 库 (.so) 文件。

ARCore 目前没有扩展对 ARM64 的支持(https://github.com/google-ar/arcore-unity-sdk/issues/201。-> 现在已修复)并且应用程序正在崩溃。

我的应用仅支持 ARM64 和 ARMV7。当我从 ABI 过滤器和 SPlits 中排除 ARM64 时。它有效。

由于其他问题,我不再使用 ARCore。

【讨论】:

【参考方案4】:

在我的例子中,它是由 JNI 库引起的。

我制作了一个空的 Android 项目,并将 unity 项目添加为模块。

所以默认的 Android 项目找不到正确的 JNI 库,它会导致与您的错误消息相同的崩溃。

如果您检查您的 JNI 文件是否在项目中。

如果有,检查gradle文件哪些路径被正确添加

【讨论】:

以上是关于没有找到 void com.unity3d.player.UnityPlayer.nativeRestartActivityIndi​​cator() 的实现的主要内容,如果未能解决你的问题,请参考以下文章

void的一个用途

C中的“void (*f)(void)”是啥意思

Non void方法调用而不在Java中分配返回值

为啥不可能有一个对 void 的引用?

C# Xamarin - 如何延迟第二个 void

如何在 CFFI 中找到指向结构的指针的地址并将其转换为 void**