Android Release构建打开ARScene崩溃,未使用onTrackingUpdated方法
解决Android Release构建中ARScene因
onTrackingUpdated方法缺失崩溃的问题 这个问题我帮不少开发者排查过,核心原因是Release构建的代码混淆(ProGuard/R8)把ARScene里的onTrackingUpdated方法给移除了——虽然你自己的代码里没直接调用这个方法,但Viro的Native底层会通过反射机制调用它,Debug模式下混淆是关闭的,所以一切正常,到了Release就触发崩溃。
解决方案:修改ProGuard配置保留目标方法
- 打开你的Android项目里的
proguard-rules.pro文件(如果用的是R8,配置逻辑完全一致) - 添加以下规则,确保
ARScene的onTrackingUpdated方法不会被混淆移除:
-keep class com.viro.core.ARScene { void onTrackingUpdated(int, int); }
如果担心后续还有其他Viro相关的混淆问题,可以直接保留整个Viro核心包的类和方法,一劳永逸:
-keep class com.viro.core.** { *; }
- 重新编译并打包Release版本,再测试ARScene的加载,崩溃问题应该就能解决了。
为什么Debug模式没问题?
Debug构建默认关闭了代码混淆和字节码优化,所有类和方法都会完整保留,Viro的Native层能顺利通过反射找到onTrackingUpdated方法;而Release构建为了减小包体积和优化性能,ProGuard/R8会自动移除它认为“未被使用”的方法,这就导致Native层反射调用时抛出NoSuchMethodError。
内容的提问来源于stack exchange,提问作者Mahalakshmi Saravanan
相关产品推荐
相关产品推荐

