Him*_*der 5 android reactjs react-native
我试图加载jsbundle(离线反应应用程序)时随机崩溃
mReactInstanceManager = ReactInstanceManager.builder().setApplication(mActivity.getApplication())
.setJSBundleFile(appPath)
.addPackage(mReactPackage).addPackage(new MyCustomReactPackage())
.setUseDeveloperSupport(false)//For performance use false
.setInitialLifecycleState(LifecycleState.RESUMED)
.setNativeModuleCallExceptionHandler(new NativeModuleCallExceptionHandler() {
@Override
public void handleException(Exception e) {
e.printStackTrace();
Logger.e(TAG,"Exception while opening app "+ Log.getStackTraceString(e));
}
})
.build();
reactRootView.startReactApplication(mReactInstanceManager, launchClassName, initialProps);
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
LOCATION com.facebook.react.JSCConfig$1.a()
EXCEPTION java.lang.NoClassDefFoundError
MESSAGE com.facebook.react.bridge.WritableNativeMap
at com.facebook.react.JSCConfig$1.a()(null:14)
at com.facebook.react.ReactInstanceManager.k()(null:359)
at com.facebook.react.ReactInstanceManager.j()(null:353)
at com.facebook.react.ReactInstanceManager.c()(null:295)
at com.facebook.react.ReactRootView.a()(null:221)
at com.example.sdk.uidesign.fragments.AppFragment.b()(null:215)
at com.example.sdk.uidesign.ActivityV2.a()(null:1265)
at com.example.sdk.uidesign.adapter.AppsAdapter.a()(null:102)
at com.example.sdk.uidesign.adapter.AppsAdapter.a()(null:37)
at com.example.sdk.uidesign.a.e$a$1.onClick()(null:135)
at android.view.View.performClick()(View.java:4790)
at android.view.View$PerformClick.run()(View.java:19883)
at android.os.Handler.handleCallback()(Handler.java:739)
at android.os.Handler.dispatchMessage()(Handler.java:95)
at android.os.Looper.loop()(Looper.java:135)
at android.app.ActivityThread.main()(ActivityThread.java:5268)
at java.lang.reflect.Method.invoke()(Method.java:-2)
at java.lang.reflect.Method.invoke()(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run()(ZygoteInit.java:902)
at com.android.internal.os.ZygoteInit.main()(ZygoteInit.java:697)
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
Android 5.1 任意限制 100 个 dex 文件
我们可以在runtime/dex_file.cc中看到什么
bool DexFile::OpenFromZip(...) {
...
while (i < 100) {
std::string name = StringPrintf("classes%zu.dex", i)
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
因此,如果您有超过 100 个 dex 文件,您会收到此 NoClassDefFoundError。
可以通过禁用预索引来避免此错误
一种可能的解决方法是禁用 preDexLibraries,这会减少 apk 中包含的classes.dex 文件的数量。
添加
android {
dexOptions {
preDexLibraries false
}
}
Run Code Online (Sandbox Code Playgroud)
到应用程序的 build.gradle 文件
使用 Android Studio 2.2RC 运行 Android 5.1 应用程序时出现 java.lang.NoClassDefFoundError
更新 :
似乎真正的问题与使用 soloader 加载 fbjni 库有关。我们最终通过预加载soloader库解决了这个问题
import com.facebook.soloader.SoLoader;
@Override public void onCreate() {
...
...
SoLoader.init(getApplicationContext(), /* native exopackage */ false);
//SoLoader.loadLibrary("fbjni"); //uncomment this line if the issue is not resolved
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
476 次 |
| 最近记录: |