【问题标题】:Firebase emulator com.facebook.soloader.SoLoader$WrongAbiErrorFirebase 模拟器 com.facebook.soloader.SoLoader$WrongAbiError
【发布时间】:2020-01-16 05:29:33
【问题描述】:

我正在尝试使用 Mapbox Android 库测试一个基本的 Android 应用程序 (Kotlin)。我的仪器测试通过在我的开发笔记本电脑上运行的模拟器。但是他们在 Firebase 的运行模拟器的测试实验室中失败了。他们通过了 Firebase 运行物理设备的测试实验室。

我在 Firebase 测试实验室模拟器 Nexus5X 和 Pixel2 上遇到以下异常:

java.lang.ExceptionInInitializerError 在 com.mapbox.mapboxsdk.net.ConnectivityReceiver.instance(ConnectivityReceiver.java:43) 在 com.mapbox.mapboxsdk.Mapbox.getInstance(Mapbox.java:67) 在 com.locuslabs.sdk.llpublic.LLMapFragment.onCreateView(LLMapFragment.kt:61) 在 androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600) 在 androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881) 在 androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238) 在 androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303) 在 androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439) 在 androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079) 在 androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869) 在 androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824) 在 androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727) 在 androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2663) 在 androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManagerImpl.java:2613) 在 androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:246) 在 androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:542) 在 androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201) 在 com.locuslabs.sdktestapp.MapActivity.onStart(MapActivity.kt:74) 在 android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1333) 在 androidx.test.runner.MonitoringInstrumentation.callActivityOnStart(MonitoringInstrumentation.java:714) 在 android.app.Activity.performStart(Activity.java:6992) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2780) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 在 android.app.ActivityThread.-wrap11(未知来源:0) android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 在 android.os.Handler.dispatchMessage(Handler.java:105) 在 androidx.test.espresso.base.Interrogator.loopAndInterrogate(Interrogator.java:148) 在 androidx.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:525) 在 androidx.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:484) 在 androidx.test.espresso.base.UiControllerImpl.injectMotionEvent(UiControllerImpl.java:236) 在 androidx.test.espresso.action.MotionEvents.sendUp(MotionEvents.java:162) 在 androidx.test.espresso.action.MotionEvents.sendUp(MotionEvents.java:139) 在 androidx.test.espresso.action.Tap.sendSingleTap(Tap.java:170) 在 androidx.test.espresso.action.Tap.access$100(Tap.java:31) 在 androidx.test.espresso.action.Tap$1.sendTap(Tap.java:47) 在 androidx.test.espresso.action.GeneralClickAction.perform(GeneralClickAction.java:137) 在 androidx.test.espresso.contrib.RecyclerViewActions$ActionOnItemAtPositionViewAction.perform(RecyclerViewActions.java:306) 在 androidx.test.espresso.contrib.RecyclerViewActions$ActionOnItemViewAction.perform(RecyclerViewActions.java:228) 在 androidx.test.espresso.ViewInteraction$SingleExecutionViewAction.perform(ViewInteraction.java:366) 在 androidx.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:255) 在 androidx.test.espresso.ViewInteraction.access$100(ViewInteraction.java:65) 在 androidx.test.espresso.ViewInteraction$1.call(ViewInteraction.java:158) 在 androidx.test.espresso.ViewInteraction$1.call(ViewInteraction.java:155) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 android.os.Handler.handleCallback(Handler.java:789) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6541) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 引起 作者:com.mapbox.mapboxsdk.MapStrictModeException:地图检测到错误 否则会静默失败:无法加载本机共享 图书馆。 - com.facebook.soloader.SoLoader$WrongAbiError:APK 已构建 对于不同的平台 com.mapbox.mapboxsdk.MapStrictMode.strictModeViolation(MapStrictMode.java:34) 在 com.mapbox.mapboxsdk.LibraryLoader.load(LibraryLoader.java:49) 在 com.mapbox.mapboxsdk.net.NativeConnectivityListener.(NativeConnectivityListener.java:13)

Firebase 测试实验室的模拟器有什么问题?为什么不能加载 Mapbox 的原生代码?

【问题讨论】:

    标签: mapbox-android firebase-test-lab


    【解决方案1】:

    仅从堆栈跟踪很难完全诊断这一点。您是否正在为 x86 目标架构构建应用程序?您使用的是拆分 APK 还是通用 APK?

    我认为您看到的不同行为是因为 Firebase 测试实验室虚拟设备在 x86 上运行,而绝大多数 Android 物理设备都有 ARM 处理器。

    “无法加载本机共享库。- com.facebook.soloader.SoLoader$WrongAbiError: APK is built for a different platform”- 似乎表明在查找本机 ARM 代码而不是 x86 代码时存在问题。

    本页讨论了类似的错误情况:https://github.com/facebook/react-native/issues/5773

    【讨论】:

    • 感谢您的帮助。如何确定我的应用程序是为哪种架构构建的?如何确定我使用的是拆分 APK 还是通用 APK?我可能正在使用拆分或通用 APK 的默认架构和默认选择,因为我在 Android Studio 中使用其模板之一创建了我的应用程序,并且我没有更改这些设置。
    • 在阅读了splits 之后,我确定我没有使用拆分,因此我的应用必须构建为通用 APK。请记住,Android Studio 可用的模拟器不会出现问题。根据我转到“工具”>“AVD 管理器”时看到的 CPU/ABI 列,Android Studio 可用的模拟器似乎也可以在 x86 上运行。我猜 Firebase 测试实验室中的模拟器与 Android Studio 中的模拟器有所不同。
    • 您为 FTL 虚拟设备尝试过哪些 API 级别?我很好奇是否所有 API 级别都会出现相同的错误消息。
    • 你能把 MapBox 库编译成 x86 代码吗?那将解决这个问题。或者 Facebook 的 soloader 中可能存在错误。仅从此处提供的信息很难对此进行调试。
    • P.戴维斯,我在 Nexus5X 和 Pixel2 的模拟器上运行它。不久前,但我认为 API 级别是 28。我认为可以使用实现 Mapbox 的基本应用程序进行复制,例如他们的 Android 演示应用程序github.com/mapbox/mapbox-android-demo
    猜你喜欢
    • 1970-01-01
    • 2020-09-27
    • 2021-09-06
    • 2018-04-16
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 2020-09-20
    相关资源
    最近更新 更多