【问题标题】:How can i specify the app (created in the Google Play Console) i want to update using Fastlane?如何指定要使用 Fastlane 更新的应用程序(在 Google Play 控制台中创建)?
【发布时间】:2020-10-08 09:17:47
【问题描述】:

我目前正在尝试在“Fastlane”的帮助下设置持续集成。 该项目已准备好构建并上传到 Google Play 商店。如果我手动执行此操作,一切正常。

我们希望在 Google Play 中拥有三个不同的应用(具有三个不同的标识符 [com.myapp、com.myapp.int、com.myapp.rc])。其中只有一个是公开的。其背后的原因是能够在一台设备上安装每个环境以进行测试。这当然不是实现这一目标的最优雅的方式。但我相信是the only one,而且可能不是没有原因的。

所以我能够为不同的环境构建应用程序。我目前面临的问题是,如果我想使用 Fastlane 上传它们,我只能上传标识符为 com.myapp 的一个,其他的会收到以下错误消息:

[10:57:14]: fastlane finished with errors
[!] Google Api Error: forbidden: APK has the wrong package name. - APK has the wrong package name.

这听起来很合理,因为我从未指定要更新哪个应用程序。如果我手动上传 AAB,我会导航到“Google Play 控制台”内的正确应用程序并将其上传到那里,但似乎 Fastlane 中不存在此选项(这会很奇怪)。 也很奇怪,只有其中一个可以工作,因为我什至无法选择哪个应该工作。 Google/Fastlane 如何选择我要更新的应用程序?

首先我认为该应用程序将在 json 键中指定用于 google play。但我在这篇medium 帖子中读到,它在不同的项目中都是一样的。

这是我的快速文件:

default_platform(:android)

platform :android do
  desc "Runs all the tests"
  lane :test do
    gradle(task: "test")
  end

  desc "Submit a new Beta Build to Play Store"
  lane :beta do
    sh("cp", "../../.env.integration", "../../.env")
    gradle(task: 'clean')
    gradle(
      task: 'bundle',
      build_type: 'Release',
      print_command: false,
    )
    upload_to_play_store(
      track: 'internal'
    )
  end
end

这是我的应用文件:

json_key_file("~/.private_keys/google_api_key.json")
package_name("com.myapp")


for_platform :android do
  for_lane :beta do
    package_name("com.myapp.int")
  end
end

【问题讨论】:

  • 请向我们展示您的 fastlane 文件中的相关脚本。
  • @AlexanderHoffmann 我已经添加了我的 Fastfile 的内容

标签: android react-native deployment continuous-integration fastlane


【解决方案1】:

您在 Appfile 中调用的 package_name() 函数将指定 Google Play fastlane 中的哪个 App 应尝试更新。

但它并不能确定 gradle 用于构建 App 的 applicationId,因此您必须确保这两个值匹配。

【讨论】:

    【解决方案2】:

    我们就是这样解决的:

        lane :build_lane do
            slack(message: "Starting build for myapp", default_payloads:[])
            build_android kFlavour:"myapp1" , kPackage_name:"com.abc.def"
        end
    

    这部分:

        lane :build_android do | options |
            sh("flutter", "build", "appbundle", "--flavor", options[:kFlavour], "--no-sound-null-safety")
            slack(message: "Uploading " + options[:kFlavour] + " to playstore", default_payloads:[])
            upload_to_play_store(
                track: 'internal',
                track_promote_to:'alpha',
                version_code: flutter_version()["version_code"],
                version_name: flutter_version()["version_name"] + '+' + flutter_version()["version_code"],
                aab: "../build/app/outputs/bundle/"+options[:kFlavour]+"Release/app-" + options[:kFlavour] + "-release.aab",
                skip_upload_changelogs: true,
                skip_upload_screenshots: true,
                skip_upload_images: true,
                package_name: options[:kPackage_name],
            )
            slack(message: options[:kFlavour] + " successfully released on Android!", default_payloads:[])
        end
    

    我们在 upload_to_play_store() 中添加了 package_name 行

    【讨论】:

      【解决方案3】:

      根据documentation,您可以通过apkaab参数指定APK或AAB的路径。

      在您的示例中,您应该能够像这样上传特定的 android app bundle(将 PATH_TO_AAB.aab 替换为文件的实际相对或绝对路径):

      upload_to_play_store(
        track: 'internal',
        aab: 'PATH_TO_AAB.aab'
      )
      

      另类

      或者,您可以为您拥有的三个应用版本创建三个不同的通道。

      然后,您可以在每个通道中指定必须在 gradle 任务中构建哪种风味。

      例如,如果您的某个风味/版本的名称为“pro”,您可以将gradle 命令中的build_type 设置为ProRelease 而不是Release。这样,只构建特定风味的发布版本。

      desc "Submit a new Beta Build to Play Store"
        lane :beta do
          releaseFilePath = File.join(Dir.pwd, "..", "keystores","my-release-key.keystore")
          gradle(task: 'clean')
          gradle(
            task: 'bundle',
            build_type: 'ProRelease',
            print_command: false,
          )
          upload_to_play_store(
            track: 'internal'
          )
        end
      

      【讨论】:

      • 恐怕我的问题不够具体,抱歉。我再次更新了我的问题,提供了更多信息。我面临的问题不是构建本身。我能够使用三个不同的标识符(和环境变量)构建三个不同的应用程序。只有Fastlane执行upload_to_play_store函数时才会出现问题。
      猜你喜欢
      • 1970-01-01
      • 2018-06-19
      • 2021-12-22
      • 1970-01-01
      • 2020-04-16
      • 2022-08-13
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      相关资源
      最近更新 更多