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

问题描述 投票:3回答:1

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

怎么了?

谢谢

android admob classnotfoundexception noclassdeffounderror android-9.0-pie
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.