📌  相关文章
📜  使用 GitHub Actions 为 Android 自动发布(1)

📅  最后修改于: 2023-12-03 15:22:11.694000             🧑  作者: Mango

使用 GitHub Actions 为 Android 自动发布

在开发 Android 应用时,将应用发布至 Google Play 平台是必不可少的一步。手动构建和发布过程繁琐且容易出错,因此自动化发布流程是很必要的。GitHub Actions 是 GitHub 的持续集成和持续部署服务,它可以与 Android 应用项目集成,以实现自动化构建、测试和发布工作。本文将介绍如何使用 GitHub Actions 实现 Android 应用自动发布。

准备工作

在使用 GitHub Actions 前需要完成以下准备工作:

  1. 在 GitHub 上创建一个 Android 应用项目,并将代码托管到该项目中。

  2. 使用 Gradle 配置文件为项目添加构建和签名信息。构建文件应该至少包含 release 构建类型,其中包含构建应用的所有必要文件和任务,例如 keystore 文件、key 的密码和别名。用于签名 APK 的 keystore 文件和密码应该存储在安全的地方,例如 GitHub 的项目秘钥库中。

  3. 创建一个 Google Play Console 开发人员帐号,并创建一个应用程序。转到 Google Play Developer Console,创建应用和应用程序清单并设置交易和支付。

  4. 创建一个发布密钥(发布证书)。此证书将用于签署 APK 并将其提交到 Google Play Console。发布密钥应该存储在安全的地方,例如 GitHub 的项目秘钥库中。

创建 GitHub Actions 工作流

在准备工作完成后,可以开始为 Android 应用程序创建 GitHub Actions 工作流。

  1. 在项目的 .github/workflows 目录中创建一个新的 YAML 文件,例如 android-publish.yml

  2. 使用以下代码片段作为起点:

name: Android Publish
on:
  release:
    types: [created]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:

这个 YAML 文件定义了 Android Publish 工作流,该工作流将在每个发布版本(release)创建时启动。该工作流的唯一作业(job)名为 deploy,这个作业将运行在最新的 Ubuntu 系统上。

  1. 接下来为 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 文件以保护密钥。

  1. 配置 GitHub Secrets

上述代码中的 $ {{ 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 自动发布,可以极大地减少发布时间和减少发布错误,提高开发者的效率。