unity3d - 使用 Unity 从 AAR 文件调用 startMoniting 时发生致命崩溃
问题描述
我使用android-beacon-library-2.17.1.aar制作一个 Android 应用程序并检测 ibeacon 的主要/次要数字。当我调用beaconManager.startMonitoring(new Region("myMonitoringUniqueId", null, null, null));
应用程序时运行良好。我将我设计的程序制作到classes.jar文件中。
现在我使用 Unity 并尝试使用这个 jar 文件来检测我的 Unity Android 应用程序上的 ibeacon。我将classes.jar和AndroidManifest.xml放入我的 Unity 项目并尝试调用beaconManager.startMonitoring(new Region("myMonitoringUniqueId", null, null, null));
编译和构建通过,但是当我在手机上安装 apk 并运行它时,应用程序崩溃了。
我使用的手机:Zenfone 7 -- Android 11
Unity 版本:Unity2019.4.31f1
错误日志:
java.lang.NoSuchMethodError: No virtual method startRangingBeacons(Lorg/altbeacon/beacon/Region;)V in class Lorg/altbeacon/beacon/BeaconManager; or its super classes (declaration of 'org.altbeacon.beacon.BeaconManager' appears in /data/app/~~lOm13WWD8uZ_nbS2pIVb3A==/com.example.aartesting-LqhAFNQZtBYPkoICvZt1ig==/base.apk)
很抱歉我的英语不是很好,我怕我不能清楚地描述我的问题。如果您想更多地了解我的问题,请告诉我,我会尽力让您更多地了解我遇到的情况。
谢谢!
解决方案
我怀疑问题是由 R8 或 ProGuard 设置引起的,它们会混淆代码以防止逆向工程。startRangingBeacons
激进的 R8 或 ProGuard 设置将重命名某些类和方法(包括堆栈跟踪中提到的库类方法)。
您可以在此处阅读有关 R8 和 ProGuard 工作原理的更多信息: https ://developer.android.com/studio/build/shrink-code
要确认这是问题所在,您应该编辑 Android 的项目设置以禁用 R8 和 ProGuard。对原生 Android 项目执行此操作就像编辑 build.gradle 文件并设置minifyEnabled false
. 由于我不是 Unity 专家,因此我无法告诉您如何从 Unity 中做同样的事情。
推荐阅读
- jsonp - 如何停止地理服务器?
- pandas - 如何在 WordNetLemmatizer 中传递词性?
- javascript - 在 HTML Javascript 表单中捕获/读取 PHP 会话变量?
- python - 如何根据不同的数据框应用 minmax 缩放器
- react-native - 试图在左角显示汉堡菜单以打开左侧抽屉?
- c++ - 翻译 Assimp 3D 模型也会旋转
- python - 从 for 循环写入多个 CSV 文件
- javascript - 如果它有另一个元素,如何用元素检查锚标签?
- c++ - 为什么即使我使用了 clean 和 sync 方法,我也不能使用 std::cin 两次?
- angular - 生成命令需要在 Angular 项目中运行?