📅  最后修改于: 2023-12-03 15:22:11.694000             🧑  作者: Mango
在开发 Android 应用时,将应用发布至 Google Play 平台是必不可少的一步。手动构建和发布过程繁琐且容易出错,因此自动化发布流程是很必要的。GitHub Actions 是 GitHub 的持续集成和持续部署服务,它可以与 Android 应用项目集成,以实现自动化构建、测试和发布工作。本文将介绍如何使用 GitHub Actions 实现 Android 应用自动发布。
在使用 GitHub Actions 前需要完成以下准备工作:
在 GitHub 上创建一个 Android 应用项目,并将代码托管到该项目中。
使用 Gradle 配置文件为项目添加构建和签名信息。构建文件应该至少包含 release
构建类型,其中包含构建应用的所有必要文件和任务,例如 keystore 文件、key 的密码和别名。用于签名 APK 的 keystore 文件和密码应该存储在安全的地方,例如 GitHub 的项目秘钥库中。
创建一个 Google Play Console 开发人员帐号,并创建一个应用程序。转到 Google Play Developer Console,创建应用和应用程序清单并设置交易和支付。
创建一个发布密钥(发布证书)。此证书将用于签署 APK 并将其提交到 Google Play Console。发布密钥应该存储在安全的地方,例如 GitHub 的项目秘钥库中。
在准备工作完成后,可以开始为 Android 应用程序创建 GitHub Actions 工作流。
在项目的 .github/workflows
目录中创建一个新的 YAML 文件,例如 android-publish.yml
。
使用以下代码片段作为起点:
name: Android Publish
on:
release:
types: [created]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
这个 YAML 文件定义了 Android Publish
工作流,该工作流将在每个发布版本(release)创建时启动。该工作流的唯一作业(job)名为 deploy
,这个作业将运行在最新的 Ubuntu 系统上。
deploy
作业添加更多步骤,包括构建、签名和发布 APK 的步骤。以下是一个示例步骤列表: steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up JDK
uses: actions/setup-java@v1
with:
java-version: '11'
- name: Build APK
run: ./gradlew assembleRelease
- name: Sign APK
run: |
openssl aes-256-cbc -K ${{ secrets.KEY }} -iv ${{ secrets.IV }} -in app/key.jks.enc -out app/key.jks -d
gpg --fast-import app/key.gpg
jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore app/key.jks -storepass ${{ secrets.KEYSTORE_PASS }} -keypass ${{ secrets.KEY_PASS }} app/build/outputs/apk/release/app-release-unsigned.apk ${{ secrets.KEY_ALIAS }}
zipalign -v -p 4 app/build/outputs/apk/release/app-release-unsigned.apk app/build/outputs/apk/release/app-release.apk
- name: Upload APK to Google Play Console
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJson: ${{ secrets.GOOGLE_PLAY_STORE_JSON_KEY }}
packageName: com.example.myapp
track: production
releaseFile: app/build/outputs/apk/release/app-release.apk
whatsNew: 您可以在此添加更新说明。
- name: Remove keystore file and key password
run: rm app/key.jks && echo "Keystore file deleted successfully."
这些步骤的作用如下:
Checkout code
: 拉取最新的代码。
Set up JDK
: 设置 Java 环境,指定使用 JDK 11。
Build APK
: 运行 Gradle 命令构建 release
类型的 APK 文件。
Sign APK
: 对 APK 文件进行签名和优化。
Upload APK to Google Play Console
: 将 APK 文件上传到 Google Play Console。需要使用 r0adkll/upload-google-play
官方 Action,该 Action 提供了一个名为 upload
的命令,可以上传 APK 文件并设置更新说明、发布语言和其他详细信息。
Remove keystore file and key password
: 在上传完成后,删除 keystore 文件以保护密钥。
上述代码中的 $ {{ secrets.XXX }}
是 GitHub 机密存储库中的密钥。在运行这个工作流之前,必须将这些密钥添加到项目中,并确保密钥值正确。
在项目的设置页面中,选择 Secrets
选项卡,在那里创建以下密钥:
KEY
: 密钥值。openssl 加密的 keystore 文件使用的加密键。要生成此密钥,可以运行 openssl rand -base64 32
命令。
IV
: 加密向量值。openssl 加密的 keystore 文件使用的加密向量。要生成此值,可以运行 openssl rand -hex 16
命令。
KEYSTORE_PASS
: 存储 keystore 文件密码的变量。
KEY_PASS
: 存储密钥密码的变量。
KEY_ALIAS
: 存储密钥别名的变量。
GOOGLE_PLAY_STORE_JSON_KEY
: 存储 Google Play Console Json Key 的变量。可以从应用程序的设置下获得它。
完成上述步骤后,GitHub Actions 工作流配置就已经完成了。现在可以将代码上传到 GitHub 上,通过创建一个发布版本来调用工作流,并使其构建、签名和上传 APK 到 Google Play Store。每次提交代码之后,自动发布过程即可启动。
使用 GitHub Actions 执行 Android 自动发布,可以极大地减少发布时间和减少发布错误,提高开发者的效率。