Flutter应用debug正常release打包在Android11设备出现Illegal class access崩溃
错误触发原因
这个错误的核心诱因是Release构建开启的R8/ProGuard混淆机制错误修改了AndroidX AppCompat库类的访问权限与类名,同时Android 11对应用类访问的合法性校验比旧系统更严格,因此触发崩溃。Debug模式默认关闭混淆,所以不会出现该问题。你当前使用的Gradle 6.7版本对应的R8工具存在对高版本AppCompat库的兼容bug,是该问题的常见诱发因素。
解决方案
- 方案1:调整混淆规则
打开项目中android/app/proguard-rules.pro文件,添加如下规则,避免AppCompat相关类被错误混淆:
-keep class androidx.appcompat.app.** { *; } -keep class androidx.appcompat.widget.** { *; }
- 方案2:升级构建工具版本
你当前使用的Gradle 6.7版本偏旧,可将gradle-wrapper.properties中的distributionUrl升级为兼容版本,例如:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
同时将android/build.gradle中的Android Gradle插件版本升级到对应匹配版本,比如7.0.4,修复旧版R8的兼容bug。
方案3:校验AppCompat依赖版本
如果你的项目手动依赖了androidx.appcompat:appcompat,可将版本回退到1.3.1稳定版,或升级到最新稳定版,同时确保依赖版本和构建工具版本兼容。如果是第三方Flutter插件引入了高版本AppCompat依赖,可通过依赖强制指定版本对齐。临时验证方案
你可以先在android/app/build.gradle的buildTypes -> release配置块中,将minifyEnabled和shrinkResources都设置为false,关闭混淆和资源压缩后重新构建Release包,如果不再崩溃,即可确认是混淆导致的问题,再按上述方案调整即可。
内容的提问来源于stack exchange,提问作者Ajantha Bandara
相关产品推荐
相关产品推荐

