Flutter AWS Cognito安卓Release模式调用signIn崩溃求助
嘿,这个问题我之前在集成Amplify Auth到Flutter Android Release版时也踩过坑!咱们一步步来拆解:
问题成因
这个崩溃的核心原因是Android Release版默认开启的R8代码混淆破坏了Amplify Auth Cognito内部依赖的字段:
- Debug模式下不会启用代码混淆,Amplify的所有类、字段都能正常被访问,所以运行无异常;
- iOS的TestFlight版本虽然是Release包,但iOS的代码优化机制不会影响Amplify的内部结构,因此能正常使用;
- 而Android Release版的R8会自动混淆/移除未被标记为“需保留”的类、字段,Amplify Auth的某些内部类(从日志里的
c.b.b.w.n.n$j0能看出来)里的SUCCESS常量字段被混淆移除了,当调用Amplify.Auth.signIn时,内部逻辑通过反射查找这个字段失败,直接触发崩溃。
修复方案
解决方法很简单,就是给Amplify相关的类添加混淆豁免规则,具体步骤:
编辑Android混淆规则文件
打开Flutter项目中的android/app/proguard-rules.pro文件,添加以下规则,告诉R8不要混淆Amplify的核心类和Cognito Auth相关类:# 保留Amplify所有类和成员 -keep class com.amazonaws.amplify.** { *; } # 保留AWS核心SDK类 -keep class com.amazonaws.** { *; } # 保留JSON相关类(Amplify内部依赖) -keep class org.json.** { *; }如果想更精准,也可以直接针对日志里出现的包添加规则:
-keep class c.b.b.w.n.** { *; }验证混淆规则(可选)
如果你不确定是不是混淆的问题,可以先临时关闭Release版的混淆来验证:
打开android/app/build.gradle,找到release构建块,注释掉minifyEnabled和shrinkResources:buildTypes { release { // 临时关闭混淆验证问题 // minifyEnabled true // shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }重新打包Release APK安装测试,如果不再崩溃,就确认是混淆导致的问题,再打开混淆并添加上面的规则即可。
重新构建Release包
执行Flutter打包命令重新生成Release APK:flutter build apk --release安装到安卓物理设备测试,
signIn按钮应该就能正常工作了。
内容的提问来源于stack exchange,提问作者zilijonas
相关产品推荐
相关产品推荐

