Android 9 崩溃 minifyEnabled 和 multiDexEnabled

Posted

技术标签:

【中文标题】Android 9 崩溃 minifyEnabled 和 multiDexEnabled【英文标题】:Android 9 crash minifyEnabled and multiDexEnabled 【发布时间】:2019-06-17 15:14:04 【问题描述】:

我试图通过将 minifyEnabled 和 shrinkResources 设置为 true 来缩小我的 apk 大小,但在启动时我的应用程序崩溃并出现此错误(短版):

java.lang.ClassNotFoundException: Didn't find class "...BaseApplication" on path: DexPathList...

我为这个错误找到了很多解决方案,但似乎每个人都只在 android 4.x.x 上崩溃。我在 android 9 上测试,仍然有这个问题。 Gradle 看起来像这样:

defaultConfig 
    minSdkVersion 17
    targetSdkVersion 28
    versionName "1.0"

    multiDexEnabled  true

还有 buildTypes:

buildTypes 
    debug 
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    

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

我还在我的应用程序类中添加了这个:

override fun attachBaseContext(base: Context?) 
    MultiDex.install(this)
    super.attachBaseContext(base)

如果我尝试启动发布版本,我只会遇到此错误。当我使用相同的设置启动调试变体时,一切正常。而且,如果我在我的发布变体中添加“debuggable true”,那也没关系。仅当我尝试像上面描述的那样启动我的发布变体时才会发生这种情况。有人有想法吗?

【问题讨论】:

【参考方案1】:

当您在 release 中执行 minifyEnabled true 时,这意味着您需要 提及您不想混淆的所有文件,例如。 通过在 proguard-rules.pro 中提及 BaseApplication

请在 proguard-rules.pro 中写下一行,它将消除 BaseApplication 类的上述错误

-keep public class * extends android.app.Application

请参考此link 以进一步了解proguard。

如果您遇到更多问题,请分享来自 proguard 的内容 文件。

【讨论】:

非常好,谢谢!但是为什么从调试或发布开始会有不同的行为呢?这是相同的配置:) 因为 debug 默认情况下具有 debuggable true 标志,如您的问题中所述,它也忽略 proguard 进程

以上是关于Android 9 崩溃 minifyEnabled 和 multiDexEnabled的主要内容,如果未能解决你的问题,请参考以下文章

Android - 当 minifyEnabled true 导致 java.lang.ExceptionInInitializerError 时,带有混淆 AAR 库的应用程序崩溃

当我使用 minifyEnabled 应用程序时不断崩溃

使用 Picasso 和 minifyEnabled 时应用程序崩溃 true

设置 MinifyEnabled 后应用程序崩溃并出现未知错误 - Kotlin

如何在使用 minifyenabled true 构建签名 apk 时限制应用程序崩溃,意味着应用程序?

Android minifyEnabled true for firebase