解决Codemagic部署Firebase App Distribution时SHA1密钥变更问题
解决Codemagic构建Flutter安卓应用到Firebase App Distribution时SHA1频繁变更导致Google Auth失效的问题
方案1:用固定自定义签名密钥(最稳定,推荐)
这是根治问题的办法,让每次构建都用同一个签名密钥,SHA1自然固定:
- 先生成自己的安卓签名keystore,执行命令:
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias - 打开Codemagic项目的Environment variables,添加这几个变量:
KEYSTORE_CONTENT:把你的keystore文件转成base64(命令:base64 my-release-key.jks | tr -d '\n'),复制结果填进去KEYSTORE_PASSWORD:你创建keystore时设的密码KEY_ALIAS:密钥别名(就是上面命令里的my-alias)KEY_PASSWORD:密钥的密码
- 在Codemagic的构建脚本里配置签名,或者直接修改
android/app/build.gradle的签名部分:android { signingConfigs { release { storeFile file(System.getenv("KEYSTORE_PATH")) storePassword System.getenv("KEYSTORE_PASSWORD") keyAlias System.getenv("KEY_ALIAS") keyPassword System.getenv("KEY_PASSWORD") } } buildTypes { release { signingConfig signingConfigs.release } } } - 最后把这个固定密钥的SHA1(用
keytool -list -v -keystore my-release-key.jks获取)添加到Firebase项目一次,之后所有构建的SHA1都不会变,Google Auth就能正常工作了。
方案2:构建时自动同步SHA1到Firebase
如果暂时不想换自定义密钥,可以让Codemagic在构建过程中自动把当前的SHA1加到Firebase:
- 先把Firebase的服务账号JSON文件转成base64,添加到Codemagic的环境变量
FIREBASE_SERVICE_ACCOUNT - 在构建脚本里加这几步:
- 装Firebase CLI:
npm install -g firebase-tools - 解码服务账号并登录:
echo $FIREBASE_SERVICE_ACCOUNT | base64 --decode > service-account.json firebase login:ci --token $(cat service-account.json) - 获取当前构建的SHA1:
SHA1=$(keytool -list -v -keystore $CM_KEYSTORE_PATH -alias $CM_KEY_ALIAS -storepass $CM_KEYSTORE_PASSWORD -keypass $CM_KEY_PASSWORD | grep SHA1 | awk '{print $2}') - 把SHA1添加到Firebase项目:
firebase projects:add-android-app <你的Firebase项目ID> --package-name <你的应用包名> --sha1 $SHA1
- 装Firebase CLI:
方案3:禁用Codemagic临时签名(仅调试用)
如果是调试构建,可以关掉Codemagic的临时签名,用本地调试密钥的SHA1:
- 在Codemagic的Android build settings里,把Sign build选项关掉
- 把本地调试密钥的SHA1(一般在
~/.android/debug.keystore,密码是android)添加到Firebase项目就行,不过这个只适合调试,别用在正式发布上。
内容的提问来源于stack exchange,提问作者Ivan Rene Ramirez Castro
相关产品推荐
相关产品推荐

