【问题标题】:Integrating react-native into existing App将 react-native 集成到现有应用程序中
【发布时间】:2017-05-02 00:29:48
【问题描述】:

我们正在尝试将 react-native 集成到我们现有的 android 应用程序中: 我们的 build.gradle 的 SDK 要求是:

minSdkVersion 16
targetSdkVersion 23

我们使用 Intent 调用初始的 React index.js:

Intent inte = new Intent(this, ReactNativeStarter.class);
startActivity(inte);

其余代码来自 react 集成教程。

当我们尝试调用我们的 react 组件时,我们得到以下错误:

12-16 09:37:52.041 E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #4
Process: XXXXX, PID: XXXX
java.lang.RuntimeException: An error occured while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:300)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:818)
 Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: could not load library "libfbjni.so" needed by "libreactnativejni.so"; caused by cannot locate symbol "_ZSt16__get_once_mutexv" referenced by "libfbjni.so"...
    at java.lang.Runtime.load(Runtime.java:331)
    at java.lang.System.load(System.java:982)
    at com.facebook.soloader.DirectorySoSource.loadLibrary(DirectorySoSource.java:63)
    at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:209)
    at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:178)
    at com.facebook.react.bridge.JSCJavaScriptExecutor.<clinit>(JSCJavaScriptExecutor.java:25)
    at com.facebook.react.bridge.JSCJavaScriptExecutor$Factory.create(JSCJavaScriptExecutor.java:20)
    at com.facebook.react.ReactInstanceManagerImpl$ReactContextInitAsyncTask.doInBackground(ReactInstanceManagerImpl.java:183)
    at com.facebook.react.ReactInstanceManagerImpl$ReactContextInitAsyncTask.doInBackground(ReactInstanceManagerImpl.java:169)
    at android.os.AsyncTask$2.call(AsyncTask.java:288)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
    at java.lang.Thread.run(Thread.java:818) 

你能帮忙吗?

【问题讨论】:

  • 通过在 PackagingOptions 中将 exclude 更改为 pickFirst 来解决问题。之后我们有一个新的 react-native 错误:原因:java.lang.IllegalAccessError:方法 'void android.support.v4.net.ConnectivityManagerCompat.()' is inaccessible to class 'com.facebook.react. modules.netinfo.NetInfoModule'('com.facebook.react.modules.netinfo.NetInfoModule' 的声明出现在 /data/data/at.??????/files/instant-run/dex/slice-com. facebook.react-react-native-0.20.1_3762d580ab3ced1fa2f7503493d38e666994b9fa-classes.dex)
  • 这个错误你解决了吗?
  • 您好,是的。通过为库添加 pickFirst instad 的 Exclude 解决了该问题
  • 你能把那个代码贴出来

标签: android react-native react-native-android


【解决方案1】:

通过将 build.gradle 中的 Exclude 更改为 pickFirst 解决了这个问题

【讨论】:

猜你喜欢
  • 2018-08-29
  • 2016-01-01
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多