自动发布 Beta Android 应用到 Google Play 商店

13

我正在寻找一种方法,可以在我的CI服务器上自动发布应用程序到Google Play商店的Alpha和Beta测试流中。

我的CI设置如下:

  1. 使用Android Studio编写Android应用程序(我们真的不能使用Eclipse)。
  2. 构建脚本使用Rake编写,并运行Gradle任务以及Calabash-Android测试。
  3. 构建服务器是Teamcity 8+,目前托管在本地(虽然我们可能会转移到云中的Jenkins)。

在stackoverflow上搜寻这个问题的答案后,唯一找到的是API to automatically upload apk to Google Play? 然而,这个答案已经超过一年了,众所周知,一年在软件开发中是很长时间,所以希望情况已经有所改善。

我还有一个子问题,在将应用程序发布到这两个流之后,测试人员需要多长时间才能在商店看到它们?我听说需要24到48小时,考虑到发布到生产中的应用程序只需要几个小时,这似乎有点奇怪。


2
全新的:Google刚刚发布了发布API。请查看文档@https://developers.google.com/android-publisher/#publishing 抱歉 - 目前还没有完整的解决方案,我自己正在进行设置... - edovino
这个问题的状态是什么? - Jared Burrows
@pauljriley,你能分享一下如何将APK上传到Play商店吗? - Erum
我不知道有没有这样的插件,但你是否已经在Android Studio插件中心寻找过了呢? - rraallvv
对于那些通过网络搜索来到这里只是想要一个答案的人,无论是否离题:Fastlane是一种自动化Play Store和App Store部署的工具。 - Thomas
3个回答

19

编辑

下面的插件已经无法使用,因为谷歌关闭了旧版本的API。考虑改用Gradle Play Publisher


更新:插件现在可以从maven中央库中获得,名称为com.savillians.gradle:android-publisher:0.4。将其添加到build.gradle的buildscripts定义中,并按照下面所述应用它。
我有完全相同的问题,幸亏有@edovino的评论和Google Play API示例,我能够创建一个gradle插件,用于发布任何你想要的轨道以及任何你想要的口味/变体。
在这里查看源代码:https://github.com/bluesliverx/gradle-android-publisher 我正在努力将其发布到maven中央库中,以便可以在构建脚本中使用,但现在您可以在repo中获取android-publisher子目录,将其放在gradle构建的根目录中,并将文件夹重命名为buildSrc。 在您想要发布的android项目的build.gradle文件中使用以下行:
apply plugin: com.savillians.gradle.androidpublisher.AndroidPublisherPlugin

你可以在build.gradle文件中使用androidPublisher块来设置发布设置。
android {
    ...
}
androidPublisher {
    applicationName = "Company-Name-Product-Name/1.0"
    packageName = "<package name>"
    serviceAccountEmail = "<service account email>"
    serviceAccountKeyFile = file('<p12 keyfile - NOT the json file>')
    track = "alpha" // default, don't need to specify
    variantName = "release" // default, don't need to specify
}

请确保您创建的服务帐户具有“发布经理”权限,下载p12密钥文件并将其放置在项目目录中。然后运行以下命令:

gradle androidPublish

这将使用您指定的凭据将其发送到Google Play。祝好运,如果有问题,请告诉我,因为这是全新的。


我目前正在尝试使用这个插件,但是插件和类路径配置不匹配。它说找不到指定的插件。 - user1810737
它如何知道使用哪个APK? - user1810737
@user1810737,你是把它添加到了buildscripts配置块中而不是普通的依赖项吗?它使用variantName来决定获取哪个APK。默认的release应该可以正常工作,除非你定义了自己的变体。 - bksaville
1
applicationName需要与开发者控制台中的名称匹配吗?它是否在任何地方使用? - Enrico
3
请注意,将P12私钥保存在您的代码库中并不是一个好主意,因为这样会(主要由于Google Play发布者API的糟糕安全设计)给予对您的Google Play帐户大量访问权限。如果您必须使用此插件,请将serviceAccountKeyFile参数指向由CI服务器管理的临时路径(例如在Jenkins中使用Credentials Binding插件或Build Secret插件)。 - Christopher Orr
显示剩余7条评论

5
如果您正在使用 JenkinsGoogle Play Android Publisher Plugin 可以让您自动上传 alpha 或 beta 版本。您还可以使用它将 APK 从 alpha 提升到 beta,或者从 beta 提升到分阶段发布等。它还包括多个 APK 支持和上传(或重复使用)扩展文件的功能。通过与 Jenkins 中的凭据功能集成,插件可以安全地访问您的 Google Play 帐户,而无需将私钥检入仓库或类似操作。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接