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相关类:
检查自定义ProGuard文件是否包含上述规则,若没有则添加。-keep class com.unity3d.player.** { *; } -keep class com.unity3d.** { *; } - 回退版本验证:通过Git切换到之前能正常运行的提交版本,测试安卓交互功能。若正常,逐步合并UI开发代码,定位导致问题的具体变更。
内容的提问来源于stack exchange,提问作者Santiago14
相关产品推荐
相关产品推荐

