使用Fastlane和GitHub Actions自动发布您的Android应用程序到Google Play商店
#android #fastlane #githubactions #playstore

开发人员需要快速有效的方法来向用户传递应用程序,确保其应用程序的连续集成和清晰的版本化。
应用程序的手册发布可能很耗时,并且涉及许多可以轻松自动化的重复步骤,例如构建和签署新的应用程序文件,登录Google Play Console并上传文件。


因此,实现此目的的最有效方法是自动化将应用程序发布到Google Play商店的过程。

在本教程中,我将向您展示如何使用FastlaneGihtub Actions自动上传Android App Bundle(.AAB)到Google Play商店。

先决条件

在进行教程之前,您需要完成以下操作:

1. Create a Google Play Developer Account

2. Setup an app in your account

3. Enable Google Play Android Developer API

4. Enroll on Play App Signing:如果您不确定如何注册,请在jmango360上查看此超简洁教程

5. Configure your app to use the correct upload key for signing the app:它必须是用于注册播放应用程序签名的那个,出于本教程的目的

1.创建一个服务帐户和JSON密钥

要自动将您的应用发布到Google Play商店的过程中,您将必须提供一个JSON密钥,该密钥将用于针对Google Play开发人员API的身份验证。
为了获得此密钥,您必须先设置一个服务帐户。

创建一个新的服务帐户

步骤1:登录 Google Cloud Console

步骤2:导航到 iam&admin ,然后选择服务帐户

步骤3:创建一个新的服务帐户,并将基本编辑器的角色分配给它。

生成新的JSON密钥

步骤4:导航到您刚刚创建的服务帐户,单击创建新键,然后选择类型 json

下载钥匙并安全地存储。为了本教程的目的,将文件重命名为service-account.json

邀请服务帐户用户进入应用程序项目

步骤5:登录 Google Play Console 并导航到设置> api访问

步骤6:查找服务帐户名称(电子邮件)和授予管理员访问它。如果要将权限保持在所需的最低要求,请确保您选择了发布部分下的所有内容。

注意:请注意,授予对服务帐户的访问只能由Google Developer帐户的所有者

执行

2.设置Fastlane

步骤1:确保您已在计算机上安装了Ruby:

    ruby -v

步骤2:安装Fastlane:

    gem install fastlane -NV

步骤3:在项目的根部(即android/)运行以下命令至初始化fastlane:

    fastlane init

这将提示您输入软件包的名称,例如“ io.appname.app”。
您可以按Enter跳过其余问题,因为它们稍后可以配置。
当被问及“下载现有的元数据和设置元数据管理?”以否响应(即n)。

执行命令后,您会注意到已创建了一个新文件夹。
在此文件夹中,将有两个文件-AppfileFastfile
service-account.json放在fastlane/文件夹中,但不要将其提交给github

步骤4:在fastlane/Appfile中定义了服务帐户json键的路径(相对于速写操作的何处)和软件包名称。

假设将在项目的根源上调用速架操作,则Appfile内容如下:

    json_key_file("fastlane/service-account.json")
    package_name("io.appname.app")

重要:当您使用GitHub操作时,请确保在正确目录中还原JSON密钥(即fastlane/)。

步骤5:fastlane/Fastfile是所有方法(又称车道)必须定义的地方。

让我们看一下以下Fastfile

有两个车道(方法),其中第一个是:internal。它使用gradle操作来构建App Bundle(.AAB)和upload_to_play_store操作将捆绑包上载到Play商店的内部轨道(其他曲目选项是'alpha','beta'和``生产'')。<<<<<<<<<<<<<<<<<<<<<<<<<<<< br> 要了解有关Google Play曲目的更多信息,请单击here

第二车道是:production,并使用相同的动作来构建和发布Google Play生产曲目的捆绑包。

    default_platform(:android)

        platform :android do

            # LANE 1
            desc "Publish a new version to the Google Play (INTERNAL)"
            lane :internal do

                # Generate AAB file
                gradle(
                task: "bundle",
                build_type: "Release"
                )

                # Upload the AAB to play store (internal track)
                upload_to_play_store(track: 'internal')
            end

            # LANE 2
            desc "Publish a new version to the Google Play (PROD)"
            lane :production do

                # Generate AAB file
                gradle(
                task: "bundle",
                build_type: "Release"
                )

                # Upload the AAB to play store (production track)
                upload_to_play_store(track: 'production')
            end
        end

如果您想在发布应用程序之前确保所有内容都按预期工作,则可以将validate_only: true参数传递给upload_to_play_store操作。
它只会验证所有事物是否正确,而无需在所选轨道上实际发布应用程序。

    # Validate upload the AAB to play store (production track)
    upload_to_play_store(track: 'production', validate_only: true)

注意:您可以找到upload_to_play_store here

的所有可用参数

如果要在本地运行:production车道,请在终端中执行以下命令(注意:确保您在root dir中工作):

    bundle exec fastlane production

3.使用GitHub动作创建工作流程

为JSON密钥创建新的存储库秘密(myKeystore.keystore

上传密钥和服务帐户JSON密钥都包含敏感信息,这些信息应安全地存储,因此不应将其推入GitHub存储库。
为了能够从工作流程中访问它们,您必须从存储库秘密获取它们。为了实现这一目标,让我们首先Ecrypt/编码它们:

步骤1:在终端运行以下命令中加密.Keystore文件:

    gpg -c -armor myKeystore.keystore

此命令将提示您输入密码。重要的是:记下密码。

成功出口后,您将能够在当前目录中看到myKeystore.keystore.asc文件。

步骤2:创建一个新的存储库秘密(Encrypted_keystore),包含myKeystore.keystore.asc

的内容

步骤3:创建一个新的存储库秘密(Encrypted_keystore_passphrase),包含密码,用于加密密钥库(参考步骤1)

步骤4:编码JSON键

    base64 -it service-account.json -o encoded.base64.txt

步骤5:创建新的存储库秘密(Service_account_json)并放置encoded.base64.txt

的内容

创建一个新的github工作流程

现在,那个封装和秘密已经设置了,让我们创建Workflow .github/workflows/publish_play_store.yml,包含以下内容:

name: Publish to Play Store ( Internal track )

on:
  workflow_disptach:

jobs:
  upload-play-store-internal:
    name: Upload app to Play Store (Internal track)
    runs-on: ubuntu-latest

    steps:
      - name: Check out repository
        uses: actions/checkout@v3

      - name: Setup ruby
        uses: actions/setup-ruby@v1
        with:
          ruby-version: "3.x"

      - name: Setup fastlane
        run: |
          cd android
          bundle install
          cd ..

      - name: Restore json key # make sure that you restore the key in the correct directory (ref. fastlane/Appfile)
        run: |
          cd android/fastlane
          echo "${{ secrets.SERVICE_ACCOUNT_JSON }}" | base64 --decode > service-account.json
          cd ../..

      - name: Restore keystore # make sure that you restore the key in the correct directory (same as app/gradle.properties)
        run: |
          cd android/app
          echo "${{ secrets.ENCRYPTED_KEYSTORE }}" > myKeystore.keystore.asc
          gpg -d --passphrase ${{ secrets.ENCRYPTED_KEYSTORE_PASSPHRASE }} --batch myKeystore.keystore.asc > myKeystore.keystore
          cd ../..

      - name: Set up JDK environment
        uses: actions/setup-java@v3
        with:
          distribution: "zulu"
          java-version: 11

      - name: Install dependencies
        run: yarn install --frozen-lockfile

      - name: Make Gradlew Executable
        run: cd android && chmod +x ./gradlew

      - name: Upload app to Play Store (Internal track)
        run: |
          cd android
          bundle exec fastlane internal

恭喜,您已经自动化了应用程序发布过程。
您要做的就是运行工作流程,您的应用程序将在内部轨道上使用。要在生产轨道上发布该应用程序,只需在最后一步中切换车道,然后您就可以了。

结论

自动化应用程序部署可以节省您数小时的建筑,测试和发布
您的应用程序定期。在本教程中,我带领您完成了步骤
自动化构建和发布Android应用程序到Google Play的过程
店铺。如果您有兴趣阅读与播放商店自动化有关的其他教程
通过Gihtub的动作,我推荐Tomer Ben Rachel freecodecamp.org的这些惊人文章
并在medium.com上的Shreyas Patil