调试为什么在快速通道期间出现apkNotificationMessageKeyUpgradeVersionConflict

问题描述 投票:0回答:1

我有以下快速通道

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时才发送版本代码。

android fastlane google-play-console
1个回答
0
投票

我们遇到了完全相同的问题。具体来说,我们有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

© www.soinside.com 2019 - 2024. All rights reserved.