使用Fastlane构建不同buildTypes APK时Firebase分发异常问题
解决Fastlane上传Firebase应用分发时选错APK的问题
问题现象
使用Fastlane脚本上传debug构建的APK到Firebase应用分发时,实际总是上传Android Studio最后一次构建的APK:若最后构建的是QA版本则上传QA包,若最后是Release版本则因包名冲突报错。
用到的Fastlane脚本
desc "Build dev" lane :build_dev do gradle( task: "assemble", build_type: "debug", # 预期构建debug包 ) end desc "Deploy a new debug version to the Firebase" lane :distribute_FB_dev do build_dev firebase_app_distribution( service_credentials_file: "firebase_credentials_Dev.json", app: "1:12345678910myFBAppID", testers: "myMail@gmail.com", release_notes: "Dev FB distribution" ) end
Android Studio的buildTypes配置
buildTypes { release { buildConfigField "String", "SERVER_URL", '"https://MyURL.com"' resValue "string", "app_name", "MyAPP" minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } debug { buildConfigField "String", "SERVER_URL", '"https://myURL.com"' resValue "string", "app_name", "MyApp Debug" minifyEnabled false debuggable true applicationIdSuffix '.dev' signingConfig signingConfigs.release } }
问题原因
firebase_app_distribution动作默认会扫描项目中最新生成的APK文件,而非仅识别当前lane构建的包。如果之前有其他构建任务生成的APK(比如Release或QA版本),就会优先选择最新的那个,导致上传错误的包。
解决方法
方法1:明确指定APK路径
在firebase_app_distribution中添加apk参数,直接指定debug构建的APK路径(默认模块为app时,路径通常如下):
desc "Deploy a new debug version to the Firebase" lane :distribute_FB_dev do build_dev firebase_app_distribution( service_credentials_file: "firebase_credentials_Dev.json", app: "1:12345678910myFBAppID", testers: "myMail@gmail.com", release_notes: "Dev FB distribution", apk: "app/build/outputs/apk/debug/app-debug.apk" # 强制指定debug包路径 ) end
方法2:构建前清理旧文件
修改build_dev lane,先执行clean动作清理旧构建产物,确保最新生成的只有debug包:
desc "Build dev" lane :build_dev do gradle( task: "clean", # 先清理旧构建文件 build_type: "debug" ) gradle( task: "assemble", build_type: "debug" ) end
方法3:用build_android_app自动获取APK路径
Fastlane的build_android_app动作会返回构建后的APK路径,直接传给firebase_app_distribution更可靠,无需手动维护路径:
desc "Deploy a new debug version to the Firebase" lane :distribute_FB_dev do apk_path = build_android_app( task: "assemble", build_type: "debug" ) firebase_app_distribution( service_credentials_file: "firebase_credentials_Dev.json", app: "1:12345678910myFBAppID", testers: "myMail@gmail.com", release_notes: "Dev FB distribution", apk: apk_path ) end
内容的提问来源于stack exchange,提问作者Wahab Khan Jadon
相关产品推荐
相关产品推荐

