我刚刚将我的React Native Android应用程序投入生产,一群用户遇到了以下崩溃:
java.lang.NoClassDefFoundError
我不确定如何调试这个。我似乎无法在我的任何物理设备上本地再现它,因为它是Java而不是JavaScript,我有点不熟悉。看起来这些用户都在Android 4.x上,可能与它有关吗?
如果你能帮助我指出正确的方向,我真的很感激!
答案 0 :(得分:1)
我目前在我的项目中遇到此问题。此问题的根本原因是特定API级别的某些类不可用。
就我而言,我使用了RoleManager
,仅在API 29以后才可用。甚至我添加了如下的运行时检查:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
// Use `RoleManager` ...
}
以上代码行在Native Android项目中运行流畅,但是React Native抛出了错误。这实际上是由导入行引起的!
import android.app.role.RoleManager
尽管目前我找不到有关此现象的任何RN官方文档,但我相信RN在运行开发人员代码之前会检查所有导入是否有效!因此,与原生Android编程流程完全不同!
解决方案可能会将您正在使用的所有内容转移到Util.java / Util.kt中,并在另一个类中完善您的逻辑!
答案 1 :(得分:0)
我有一个无法复制的问题,但是在模拟器Android 4.4
中遇到以下错误
我不确定是不是仅返回部分错误的android vitals还是实际上不是相同的错误。
java.lang.RuntimeException:
Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException
E/AndroidRuntime( 3446): at android.app.ActivityThread.installProvider(ActivityThread.java:4793)
E/AndroidRuntime( 3446): at android.app.ActivityThread.installContentProviders(ActivityThread.java:4385)
E/AndroidRuntime( 3446): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4325)
E/AndroidRuntime( 3446): at android.app.ActivityThread.access$1500(ActivityThread.java:135)
E/AndroidRuntime( 3446): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
E/AndroidRuntime( 3446): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 3446): at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime( 3446): at android.app.ActivityThread.main(ActivityThread.java:5017)
E/AndroidRuntime( 3446): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 3446): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime( 3446): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
E/AndroidRuntime( 3446): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
E/AndroidRuntime( 3446): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 3446): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider"
E/AndroidRuntime( 3446): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
E/AndroidRuntime( 3446): at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
E/AndroidRuntime( 3446): at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
E/AndroidRuntime( 3446): at android.app.ActivityThread.installProvider(ActivityThread.java:4778)
E/AndroidRuntime( 3446): ... 12 more
此错误使应用程序在启动时崩溃 我可以通过以下答案解决此问题:https://stackoverflow.com/a/37317943/11170097
使用Multidex。
在您的app / build.gradle中
android {
...
defaultConfig {
....
multiDexEnabled true
}
...
}
dependencies {
implementation 'com.android.support:multidex:1.0.3'
...
}
在您的app / src / main / java /.../ MainApplication.java
中...
import android.support.multidex.MultiDex;
import android.content.Context;
public class MyApplication extends ... {
...
@Override
protected void attachBaseContext(Context context) {
super.attachBaseContext(context);
MultiDex.install(this);
}
}