You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity与Android原生交互报错:java.lang.NoSuchFieldError求助

Unity与Android交互报错:NoSuchFieldError找不到UnityPlayer.currentActivity

报错信息

2023/08/12 02:04:24.141 3621 3686 Error Unity AndroidJavaException: java.lang.NoSuchFieldError: no type "" found and so no field "currentActivity" could be found in class "Lcom/unity3d/player/UnityPlayer;" or its superclasses
2023/08/12 02:04:24.141 3621 3686 Error Unity java.lang.NoSuchFieldError: no type "" found and so no field "currentActivity" could be found in class "Lcom/unity3d/player/UnityPlayer;" or its superclasses
2023/08/12 02:04:24.141 3621 3686 Error Unity     at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
2023/08/12 02:04:24.141 3621 3686 Error Unity     at com.unity3d.player.UnityPlayer.-$$Nest$mnativeRender(Unknown Source:0)
2023/08/12 02:04:24.141 3621 3686 Error Unity     at com.unity3d.player.UnityPlayer$C$a.handleMessage(Unknown Source:122)
2023/08/12 02:04:24.141 3621 3686 Error Unity     at android.os.Handler.dispatchMessage(Handler.java:103)
2023/08/12 02:04:24.141 3621 3686 Error Unity     at android.os.Looper.loop(Looper.java:214)
2023/08/12 02:04:24.141 3621 3686 Error Unity     at com.unity3d.player.UnityPlayer$C.run(Unknown Source:24)
2023/08/12 02:04:24.141 3621 3686 Error Unity   at UnityEngine.AndroidJNISafe.CheckException () [0x0008d] in /home/bokken/build/output/unity/unity/Modules/AndroidJNI/AndroidJNISafe.cs:24
2023/08/12 02:04:24.141 3621 3686 Error Unity   at UnityEngine.AndroidJNISafe.GetStaticFieldID (System.IntPtr clazz, System.String name, System.String sig) [0x0000e] in /home/bokken/build/output/unity/unity/Modules/An

触发场景

执行以下代码时触发报错:

AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

或

Permission.HasUserAuthorizedPermission(PERMISSION_BLUETOOTH)

当前Manifest配置

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    xmlns:tools="http://schemas.android.com/tools">
    <application>
        <activity android:name="com.unity3d.player.UnityPlayerActivity"
                  android:theme="@style/UnityThemeSelector"
                  android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>
</manifest>

排查与解决步骤

  • 检查Unity Android模块完整性:打开Unity Hub,找到当前使用的Unity版本,查看Android Build Support下的组件(Android SDK & NDK Tools、OpenJDK)是否完整,若有缺失,点击"添加组件"修复安装。
  • 清理项目缓存:删除项目根目录的Library、Temp、Obj文件夹;打开Build Settings点击Clean Build清理安卓构建缓存,之后重启Unity重新构建。
  • 排查AAR包冲突:临时移除项目中所有第三方AAR包,测试安卓交互是否恢复正常。如果正常,逐个重新引入AAR,找出冲突的包并替换为兼容当前Unity版本的版本(冲突通常来自AAR包含了旧版UnityPlayer类)。
  • 验证代码调用规范:确保安卓交互代码在Unity主线程执行,获取currentActivity的标准写法如下:
    AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    
  • 检查构建混淆配置:若开启了R8/ProGuard,确保ProGuard规则中保留了Unity相关类:
    -keep class com.unity3d.player.** { *; }
    -keep class com.unity3d.** { *; }
    
    检查自定义ProGuard文件是否包含上述规则,若没有则添加。
  • 回退版本验证:通过Git切换到之前能正常运行的提交版本,测试安卓交互功能。若正常,逐步合并UI开发代码,定位导致问题的具体变更。

内容的提问来源于stack exchange,提问作者Santiago14

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 11:54:52