【问题标题】:SoLoader$WrongAbiError with React Native AndroidSoLoader$WrongAbiError 与 React Native Android
【发布时间】:2016-10-10 12:47:14
【问题描述】:

最近,我们将 react native 集成到了我们的应用程序中,仅具有 hello world 视图。在某些设备(主要是华硕)上,我们遇到了这种崩溃。

Fatal Exception: com.facebook.soloader.SoLoader$WrongAbiError: APK was built for a different platform
       at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:253)
       at com.facebook.react.bridge.ReactBridge.staticInit(ReactBridge.java:24)
       at com.facebook.react.bridge.ReactBridge.<clinit>(ReactBridge.java:20)
       at com.facebook.react.bridge.NativeMap.<clinit>(NativeMap.java:22)
       at com.facebook.react.JSCConfig$1.getConfigMap(JSCConfig.java:14)
       at com.facebook.react.XReactInstanceManagerImpl.recreateReactContextInBackgroundFromBundleLoader(XReactInstanceManagerImpl.java:423)
       at com.facebook.react.XReactInstanceManagerImpl.recreateReactContextInBackgroundInner(XReactInstanceManagerImpl.java:419)
       at com.facebook.react.XReactInstanceManagerImpl.createReactContextInBackground(XReactInstanceManagerImpl.java:363)
       at com.facebook.react.ReactRootView.startReactApplication(ReactRootView.java:213)
       at com.eightfit.app.ui.fragments.ReactFragment.startReactApp(ReactFragment.java:107)
       at com.eightfit.app.ui.fragments.ReactFragment.onViewCreated(ReactFragment.java:88)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1123)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286)
       at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758)
       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1671)
       at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388)
       at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:619)
       at com.eightfit.app.ui.activities.MainActivity.onStart(MainActivity.java:150)
       at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171)
       at android.app.Activity.performStart(Activity.java:5241)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2197)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2273)
       at android.app.ActivityThread.access$800(ActivityThread.java:138)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1236)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:149)
       at android.app.ActivityThread.main(ActivityThread.java:5045)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)
       at dalvik.system.NativeStart.main(NativeStart.java)
Caused by java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app-lib/com.eightfit.app-1/libreactnativejni.so" has unexpected e_machine: 40
       at java.lang.Runtime.load(Runtime.java:333)
       at java.lang.System.load(System.java:512)
       at com.facebook.soloader.DirectorySoSource.loadLibraryFrom(DirectorySoSource.java:71)
       at com.facebook.soloader.DirectorySoSource.loadLibrary(DirectorySoSource.java:42)
       at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:299)
       at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:247)
       at com.facebook.react.bridge.ReactBridge.staticInit(ReactBridge.java:24)
       at com.facebook.react.bridge.ReactBridge.<clinit>(ReactBridge.java:20)
       at com.facebook.react.bridge.NativeMap.<clinit>(NativeMap.java:22)
       at com.facebook.react.JSCConfig$1.getConfigMap(JSCConfig.java:14)
       at com.facebook.react.XReactInstanceManagerImpl.recreateReactContextInBackgroundFromBundleLoader(XReactInstanceManagerImpl.java:423)
       at com.facebook.react.XReactInstanceManagerImpl.recreateReactContextInBackgroundInner(XReactInstanceManagerImpl.java:419)
       at com.facebook.react.XReactInstanceManagerImpl.createReactContextInBackground(XReactInstanceManagerImpl.java:363)
       at com.facebook.react.ReactRootView.startReactApplication(ReactRootView.java:213)
       at com.eightfit.app.ui.fragments.ReactFragment.startReactApp(ReactFragment.java:107)
       at com.eightfit.app.ui.fragments.ReactFragment.onViewCreated(ReactFragment.java:88)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1123)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286)
       at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758)
       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1671)
       at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388)
       at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:619)
       at com.eightfit.app.ui.activities.MainActivity.onStart(MainActivity.java:150)
       at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171)
       at android.app.Activity.performStart(Activity.java:5241)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2197)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2273)
       at android.app.ActivityThread.access$800(ActivityThread.java:138)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1236)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:149)
       at android.app.ActivityThread.main(ActivityThread.java:5045)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)
       at dalvik.system.NativeStart.main(NativeStart.java)

在 gradle 中我们这样定义 Android NDK abi 过滤器

ndk {
    abiFilters "armeabi", "armeabi-v7a", "mips", "x86"
}

我们使用 React Native 0.35.0-rc.0,但我们在稳定版本 0.33.1 中也遇到了同样的崩溃。

受影响的华硕设备使用 cpu abi armeabi-v7a。大多数其他具有相同 abi 的设备似乎都可以正常工作。

您可以在此处找到完整的崩溃报告。 https://gist.github.com/sealskej/5fc0c8e9092721d2be43b4d1ff3c60de

任何有助于解决问题的帮助将不胜感激!

【问题讨论】:

  • 那些华硕设备都是基于 x86 的,但可能可以通过 libhoudini 运行 ARM 代码。应用程序尝试加载的两个库的哪个变体可能不匹配。这似乎相关:stackoverflow.com/questions/27754468/…
  • @sealskej,有什么消息吗?

标签: android android-ndk crash react-native


【解决方案1】:

我和你有同样的问题。而且我发现如果可能的话,你应该为每个 ABI 提供优化的库,但要么全有,要么全无:你不能混用。您必须提供您在每个 ABI 文件夹中使用的全套库。在我的 armeabi-v7a 字典中的项目中有 32 个 .so 文件,但在 x86 字典中是 31 个 .so 文件。所以 SoLoader 可能会加载错误x86 设备中的文件。您可以查看此link 了解更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 2022-12-05
    • 2017-10-11
    • 2017-05-12
    • 2021-04-05
    相关资源
    最近更新 更多