自sdk更新以来,Google Play控制台中出现NoClassDefFoundError ClassNotFoundException错误

时间:2019-05-20 08:01:05

标签: android admob classnotfoundexception noclassdeffounderror android-9.0-pie

我的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设备发生了崩溃,但肯定还会更多。

出什么问题了?

谢谢

1 个答案:

答案 0 :(得分:0)

一种解决方案是在 build.gardle 配置中同时禁用minifyEnabled(代码收缩,混淆和优化)和shrinkResources字段。

buildTypes {
    release {
        minifyEnabled false
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

我认为这是由于minifyEnabled代码缩小导致对类名进行重命名而发生的。

由于删除未使用的资源需要打开未使用的代码收缩功能,因此您也必须禁用rinkeResources。

See android documentation on shrink-code