通过GitHub Action用Fastlane分发应用到Firebase App Distribution报错找不到二进制文件
问题根因
你遇到的Couldn't find binary报错核心原因是:Fastlane的dev lane中缺少构建APK的步骤。
本地执行命令时你本地环境有之前手动构建生成的APK缓存,Fastlane可以在默认的构建产物路径找到对应文件,因此运行正常。而GitHub Action的运行环境每次启动都是全新的干净实例,不存在预先生成的APK文件,因此firebase_app_distribution步骤无法找到目标二进制文件触发报错。
另外你贴出的GitHub Actions配置存在YAML缩进错误,steps字段的缩进层级和distribute job下的runs-on字段不对齐,也可能导致步骤执行异常。
修复方案
- 调整Fastfile的
devlane,在调用Firebase App Distribution前先执行gradle构建命令生成APK:
desc "Build and submit to Firebase App distribution Internal users" lane :dev do # 新增构建步骤,可根据你的需求替换为assembleRelease/你自己的构建变体 gradle(task: "assembleDebug") firebase_app_distribution( app: "some -app -ID", groups: "internal-testers", release_notes_file: "FirebaseAppDistributionConfig/dev_notes.txt", # 如果你的构建产物不在默认路径,可以显式指定apk_path参数,比如: # apk_path: "app/build/outputs/apk/debug/app-debug.apk" ) end
优化提示:你可以把Fastfile中firebase_app_distribution的app参数改为读取环境变量,避免硬编码:
firebase_app_distribution( app: ENV['FIREBASE_APP_ID'], # 其他参数保持不变 )
- 修正GitHub Actions配置的YAML缩进,确保
steps和runs-on字段同级,都属于distributejob的子属性:
jobs: distribute: runs-on: ubuntu-latest # steps缩进要和上面的runs-on对齐 steps: - uses: actions/checkout@v2 # 剩余原有步骤保持不变
查看详细报错的方法
你可以通过以下方式获取Fastlane的完整报错堆栈和调试信息:
- 执行Fastlane命令时添加
--verbose参数,输出完整调试日志。把GitHub Action中的执行命令修改为:bundle exec fastlane dev --verbose
运行后就能看到Fastlane搜索二进制文件的路径、完整的报错堆栈信息。 - 可以在Fastfile的lane中添加目录打印语句,确认构建产物是否正常生成、路径是否符合预期:
lane :dev do gradle(task: "assembleDebug") # 打印当前工作目录和所有apk文件路径 puts "当前工作目录:#{Dir.pwd}" puts "目录下所有APK文件:#{Dir['**/*.apk']}" firebase_app_distribution( # 原有配置 ) end
内容的提问来源于stack exchange,提问作者Amit Pal
相关产品推荐
相关产品推荐

