我的wapp正在被编译并定位到api 27,并使用了较早版本的firebase广告。现在,在更新应用程序并编译并定位api 28并使用每个sdk的最新版本(包括firebase广告(与admob相同),也使用R8而不是proguard进行编译之后),我遇到了很多类似的异常情况这在Google Play控制台的“崩溃”部分中:
java.lang.NoClassDefFoundError:
at gk.b (gk.java:3)
at gl.a (gl.java:3)
at gn.a (gn.java:18)
at com.google.android.gms.ads.internal.util.ar.a (ar.java:5)
at fo.a (fo.java:19)
at fo.run (fo.java:8)
Caused by: java.lang.ClassNotFoundException:
at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:171)
at java.lang.ClassLoader.loadClass (ClassLoader.java:379)
at ab.loadClass (ab.java:4)
at java.lang.ClassLoader.loadClass (ClassLoader.java:312)
at gk.b (gk.java:3)
at gl.a (gl.java:3)
at gn.a (gn.java:18)
at com.google.android.gms.ads.internal.util.ar.a (ar.java:5)
at fo.a (fo.java:19)
at fo.run (fo.java:8)
我不知道为什么混淆,因为我上传了映射文件,也许是因为较新的android studio版本使用R8而不是proguard。
一些用户发表了不好的评论,因为他们看到自应用更新以来的崩溃。我无法在任何设备上使应用程序崩溃。
据报道,小米MI 8和OnePlus 5T设备发生了崩溃,但肯定还会更多。
出什么问题了?
谢谢
答案 0 :(得分:0)
一种解决方案是在 build.gardle 配置中同时禁用minifyEnabled
(代码收缩,混淆和优化)和shrinkResources
字段。
buildTypes {
release {
minifyEnabled false
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
我认为这是由于minifyEnabled代码缩小导致对类名进行重命名而发生的。
由于删除未使用的资源需要打开未使用的代码收缩功能,因此您也必须禁用rinkeResources。