我如何指定要使用 Fastlane 更新的应用程序(在 Google Play 控制台中创建)?
How can i specify the app (created in the Google Play Console) i want to update using Fastlane?
我目前正在尝试在“Fastlane”的帮助下设置持续集成。
该项目已准备好构建并上传到 Google Play 商店。如果我手动执行此操作,一切正常。
我们希望在 Google Play 中拥有三个不同的 App(具有三个不同的标识符 [com.myapp、com.myapp.int、com.myapp.rc])。其中只有一个 public。其背后的原因是能够在一台设备上安装每个环境以进行测试。这当然不是实现这一目标的最优雅的方式。但我相信这是 并且可能并非没有原因。
所以我能够为不同的环境构建应用程序。我目前面临的问题是,如果我想使用 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 Console”内的正确应用程序并将其上传到那里,但似乎 Fastlane 中不存在此选项(这会很奇怪)。
奇怪的是,只有其中一个有效,因为我什至无法选择哪个应该有效。 Google/Fastlane 如何选择我要更新的应用程序?
首先,我认为该应用程序会在 json 键内指定,以便 google 播放。但是我在这个 medium post 中读到它在不同的项目中是相同的。
这是我的 Fastfile:
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
根据documentation,您可以通过apk
或aab
参数指定APK或AAB的路径。
在您的示例中,您应该能够像这样上传特定的 android 应用程序包(将 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
您在 Appfile 中调用的 package_name()
函数将指定 Google Play fastlane 中的哪个 App 应该尝试更新。
但是它不能确定 applicationId
哪个 gradle 用于构建应用程序,因此您必须确保这两个值匹配。
我们是这样解决的:
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 行
我目前正在尝试在“Fastlane”的帮助下设置持续集成。 该项目已准备好构建并上传到 Google Play 商店。如果我手动执行此操作,一切正常。
我们希望在 Google Play 中拥有三个不同的 App(具有三个不同的标识符 [com.myapp、com.myapp.int、com.myapp.rc])。其中只有一个 public。其背后的原因是能够在一台设备上安装每个环境以进行测试。这当然不是实现这一目标的最优雅的方式。但我相信这是
所以我能够为不同的环境构建应用程序。我目前面临的问题是,如果我想使用 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 Console”内的正确应用程序并将其上传到那里,但似乎 Fastlane 中不存在此选项(这会很奇怪)。 奇怪的是,只有其中一个有效,因为我什至无法选择哪个应该有效。 Google/Fastlane 如何选择我要更新的应用程序?
首先,我认为该应用程序会在 json 键内指定,以便 google 播放。但是我在这个 medium post 中读到它在不同的项目中是相同的。
这是我的 Fastfile:
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
根据documentation,您可以通过apk
或aab
参数指定APK或AAB的路径。
在您的示例中,您应该能够像这样上传特定的 android 应用程序包(将 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
您在 Appfile 中调用的 package_name()
函数将指定 Google Play fastlane 中的哪个 App 应该尝试更新。
但是它不能确定 applicationId
哪个 gradle 用于构建应用程序,因此您必须确保这两个值匹配。
我们是这样解决的:
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 行