You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开启代码混淆后App崩溃,如何适配minSdkVersion 21?

解决方案:低版本SDK开启混淆后Lifecycle相关崩溃问题

问题根源

开启minifyEnabled true和shrinkResources true后,R8/ProGuard会移除仅在API 28(Android 9)及以上存在的android.app.Application$ActivityLifecycleCallbacks$-CC合成类,但AndroidX Lifecycle组件的ReportFragment在低版本设备(API21)上会尝试调用该类,导致NoClassDefFoundError崩溃。

可行解决方案

方案1:添加ProGuard保留规则

在项目的proguard-rules.pro文件中添加以下规则,阻止混淆工具移除相关类和方法:

# 保留ActivityLifecycleCallbacks的默认方法合成类
-keep class android.app.Application$ActivityLifecycleCallbacks$-CC { *; }

# 或者更精准地保留新增的默认方法
-keepclassmembers class android.app.Application$ActivityLifecycleCallbacks {
    public default void onActivityPreStarted(android.app.Activity);
    public default void onActivityPostStopped(android.app.Activity);
}

添加后重新编译打包即可解决崩溃,同时保持minSdkVersion=21和混淆开启的状态。

方案2:升级AndroidX Lifecycle库

将项目中Lifecycle相关依赖升级到2.6.0及以上版本,例如在build.gradle(Module级别)中更新:

dependencies {
    implementation 'androidx.lifecycle:lifecycle-runtime:2.6.2'
}

更高版本的Lifecycle库已经修复了低版本设备上的这个兼容性问题,无需额外添加ProGuard规则即可正常运行。

内容的提问来源于stack exchange,提问作者张乘铭

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:39:28