NoClassDefFoundError com.facebook.react.bridge.WritableNativeMap

Я случайно получаю сбои при попытке загрузить 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); 

Трассировки стека:

 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.ae$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) 

Любая помощь будет оценена по достоинству.

Android 5.1 имеет произвольный лимит в 100 файлов dex

Вот что мы видим в runtime / dex_file.cc

 bool DexFile::OpenFromZip(...) { ... while (i < 100) { std::string name = StringPrintf("classes%zu.dex", i) ... } ... } 

Поэтому, если у вас есть более 100 файлов dex, вы получаете этот NoClassDefFoundError.

Эту ошибку можно избежать, отключив предварительный анализ

Один из возможных способов обхода – отключить preDexLibraries, что уменьшает количество файлов classes.dex, включенных в apk.

Добавить

 android { dexOptions { preDexLibraries false } } 

В файл build.gradle приложения

Java.lang.NoClassDefFoundError при запуске приложения с Android 5.1 с Android Studio 2.2RC

Обновить :

Похоже, настоящая проблема связана с загрузкой библиотеки fbjni с помощью солодера. Мы, наконец, исправили эту проблему, предварительно загрузив библиотеку солодера

 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 }