设置shrinkResources和minifyEnabled为true后Android发布版崩溃
解决开启代码混淆后flutter_inappwebview引发的java.lang.VerifyError崩溃
问题原因
开启minifyEnabled和shrinkResources后,R8混淆器错误地重命名了Android系统SSL相关类(如android.net.http.SslError、android.net.http.SslCertificate),而flutter_inappwebview库的InAppWebViewClient类内部方法依赖这些类的原始类型定义,混淆后虚拟机类型校验失败,抛出VerifyError。
解决方案
1. 添加混淆规则到proguard-rules.pro
在Android项目的android/app/proguard-rules.pro文件中添加以下规则,保留库和相关系统类不被混淆:
# 保留flutter_inappwebview所有类及成员,避免内部逻辑被破坏 -keep class com.pichillilorenzo.flutter_inappwebview.** { *; } # 保留Android系统SSL及WebView相关类,防止类型校验失败 -keep class android.net.http.SslError { *; } -keep class android.net.http.SslCertificate { *; } -keep class android.webkit.ClientCertRequest { *; } -keep class android.webkit.HttpAuthHandler { *; } -keep class android.webkit.SslErrorHandler { *; }
2. 确认build.gradle配置正确
在android/app/build.gradle的release构建块中,确保混淆规则文件被正确引用:
android { // ...其他配置 buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } }
3. 清理并重新构建发布版本
执行以下命令清理缓存并重新生成发布包:
flutter clean flutter build apk --release
内容的提问来源于stack exchange,提问作者Sanjay Shah
相关产品推荐
相关产品推荐

