首页 > 解决方案 > 使用 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.jarAndroidManifest.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)

很抱歉我的英语不是很好,我怕我不能清楚地描述我的问题。如果您想更多地了解我的问题,请告诉我,我会尽力让您更多地了解我遇到的情况。

谢谢!

标签: unity3dibeaconaltbeaconandroid-ibeacon

解决方案


我怀疑问题是由 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 中做同样的事情。


推荐阅读