我有以下快速通道
desc "Assemble Build, Test Application, and Run On Device"
lane :assemble do
assemble_build
tests
end
desc "Assemble Build"
lane :assemble_build do |options|
gradle(task: "assemble", build_type: @build_type)
end
desc "Run tests in Firebase Test Lab"
lane :tests do
firebase_test_lab_android(
project_id: "mobile-project",
gcloud_service_key_file: "client-secret.json",
app_apk: "app/build/outputs/apk/release/app-release.apk",
type: "robo",
devices: [ { model: "Pixel2", version: "28" } ]
)
end
desc "Assemble Build, Test Application, and Run On Device, Upload App Store"
lane :master_release do
gradle(task: "clean assembleRelease")
upload_to_play_store(track: "internal", skip_upload_metadata: true, skip_upload_images: true, skip_upload_screenshots: true)
tests
end
bundle exec fastlane assemble release:true
bundle exec fastlane master_release release:true
由于某种原因,一旦我的分支掌握了,就会出现以下错误:
[Google Api错误:apkNotificationMessageKeyUpgradeVersionConflict:APK指定已经使用的版本代码。 -APK指定已经使用的版本代码。
此错误基本上是说我的versionCode
中的defaultConfig { }
中的android/app/build.gradle
已被使用。
解决此问题的唯一方法是直接推送以掌握新的版本代码,因为显然在dev
推送过程中,该版本的获取文件已上传到Google,表明该版本代码已被使用。
有人知道这在哪里,所以我能理解为什么会这样吗?我的印象是,仅当我上载到Playstore时才发送版本代码。
我们遇到了完全相同的问题。具体来说,我们有CircleCI的每日构建和发布构建,分别对应于beta发布和生产发布。他们进行得相当顺利,直到大约一个星期前才将最新产品发布到Playstore。在内部,每日内部版本和发行内部版本都会从Beta渠道获取最新版本代码,并将其增加1,然后使用新版本代码推送新内部版本,分别播放商店Beta渠道和生产渠道。新的问题是,在正式发布后,beta通道的最新版本代码不会得到更新。
假设我们将拥有569-> 570-> 571-> 572-> ...然后在570版本的基础上,我们决定启动一个新版本的版本,并最终将其发布为v571。但是,由于“ Google Api错误:apkNotificationMessageKeyUpgradeVersionConflict:APK指定了版本代码,因此,每日构建可以“看到”的最新版本代码始终为570,因此将其增加到571并发布到Beta版现在与v571生产版本冲突。 -APK指定了已经使用的版本代码。“
顺便说一句,在过去,每天的构建将看到571,而不是570,因此下一个beta版本(572)将永远不会与生产渠道中的v571冲突。
[不清楚是Fastlane问题还是Google API问题,但我可以保证的是,这是由于Fastlane或Google最近的更改所致。
更新:Beta版本代码通常大于或至少等于生产版本代码。但是,由于某些仍然未知的原因,最近从google_play_track_version_codes是一个整数,以前是一个字符串数组,现在应该是一个整数数组,并且Beta版本代码小于正式版本代码。结果,我们需要比较两者,并使用较大的一个作为新版本代码。另请参阅:https://github.com/fastlane/fastlane/commit/552f0fa51aed24fbc349fa873b721ef8b73386ae