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

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相关的类添加混淆豁免规则,具体步骤:

  1. 编辑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.** { *; }
    
  2. 验证混淆规则(可选)
    如果你不确定是不是混淆的问题,可以先临时关闭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安装测试,如果不再崩溃,就确认是混淆导致的问题,再打开混淆并添加上面的规则即可。

  3. 重新构建Release包
    执行Flutter打包命令重新生成Release APK:

    flutter build apk --release
    

    安装到安卓物理设备测试,signIn按钮应该就能正常工作了。

内容的提问来源于stack exchange,提问作者zilijonas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:17:53