fastlane上传Firebase App Distribution成功但APK安装失败
问题描述
我尝试构建Android应用并上传至Firebase平台。
当前使用的工具链为CircleCI、fastlane以及fastlane-plugin-firebase_app_distribution插件。
目前CI流程可正常完成应用构建、上传至Firebase的操作,但测试用户下载应用后会弹出*'Installation failed(安装失败)'*的提示。
CI端运行日志
CI端(fastlane与fastlane-plugin-firebase_app_distribution)运行输出日志如下:
[15:58:50]: --------------------------------------- [15:58:50]: --- Step: firebase_app_distribution --- [15:58:50]: --------------------------------------- [15:58:50]: Authenticating with --service_credentials_file path parameter: ./google-services-private-key.json [15:58:50]: 🔐 Authenticated successfully. [15:58:50]: ⌛ Uploading the APK. [15:58:56]: ✅ Uploaded APK successfully and created release 1.0 (1). [15:58:56]: ✅ Posted release notes. [15:58:57]: ✅ Added testers/groups. [15:58:57]: 🎉 App Distribution upload finished successfully. +------+---------------------------+-------------+ | fastlane summary | +------+---------------------------+-------------+ | Step | Action | Time (in s) | +------+---------------------------+-------------+ | 1 | default_platform | 0 | | 2 | assemble | 124 | | 3 | firebase_app_distribution | 7 | +------+---------------------------+-------------+ [15:58:57]: fastlane.tools finished successfully 🎉 CircleCI received exit code 0
相关配置
以下为使用的Fastfile中对应lane配置:
desc "Upload to Firebase" lane :upload_firebase do gradle( task: "assemble" ) firebase_app_distribution( app: 'APP-ID', groups: 'my-group', release_notes: "Release", firebase_cli_path: "/usr/local/bin/firebase", firebase_cli_token: ENV['FIREBASE_CI_TOKEN'], service_credentials_file: './google-services-private-key.json' ) end
CI环境中执行的lane命令为:bundle exec fastlane upload_firebase。
已检索相关技术资料未找到有效解决方案,需要排查思路与解决方法。
排查思路与解决方法
按优先级从高到低排查以下问题:
- 首先检查构建的APK变体是否正确:
assemble默认会构建debug包,使用Android SDK自带的debug签名,如果测试设备上之前安装过同包名的其他签名版本(比如本地安装的正式版、其他渠道的debug版),签名冲突会直接触发安装失败。将gradle任务改成对应需要的构建变体,比如发内部测试包用assembleDebug,发正式签名测试包用assembleRelease,同时确认构建环节已经配置好对应变体的签名信息,不要上传无签名、默认debug签名的不符合要求的安装包。 - 验证APK本身完整性:从CI构建产物目录直接导出APK文件,不经过Firebase分发流程,直接用adb命令安装到测试设备上,执行
adb install 你的apk文件路径.apk,如果本地直接安装也失败,说明问题出在构建环节,和Firebase分发无关,根据adb返回的错误码定位问题:- 返回
INSTALL_FAILED_UPDATE_INCOMPATIBLE就是前述的签名冲突问题,卸载设备上原有同包名应用后重新安装,或者统一全渠道的应用签名 - 返回
INSTALL_PARSE_FAILED_NO_CERTIFICATES说明构建出的安装包没有完成签名流程,检查gradle中的签名配置是否在CI环境下生效 - 返回
INSTALL_FAILED_VERSION_DOWNGRADE说明当前上传的安装包versionCode比设备上已安装的同包名应用版本低,调高versionCode后重新构建上传即可
- 返回
- 核对Firebase控制台应用配置:确认Fastfile中填写的
app参数对应的APP-ID,和当前构建包的包名、项目中google-services.json内的应用ID完全一致,如果传错应用ID,虽然插件会提示上传成功,但实际安装包被绑定到错误的Firebase应用条目下,用户下载时会出现包名、签名不匹配的安装失败。 - 检查测试设备系统限制:Android 8.0及以上版本需要给安装来源(打开下载APK的浏览器、Firebase App Tester客户端)开启「安装未知应用」权限,未开启权限也会弹出安装失败提示;部分国产定制ROM会额外拦截非官方应用商店渠道签名的安装包,需要在安装弹窗中手动确认允许安装。
- 清理冗余认证配置:当前firebase_app_distribution配置中同时传入了
service_credentials_file和firebase_cli_token两个认证参数,二选一即可,同时保留虽然不会直接阻断上传,但在部分旧版本插件中可能触发安装包上传不完整的问题,优先保留service_credentials_file的认证方式,移除firebase_cli_path、firebase_cli_token相关配置后重新构建上传测试。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

