开发人员需要快速有效的方法来向用户传递应用程序,确保其应用程序的连续集成和清晰的版本化。
应用程序的手册发布可能很耗时,并且涉及许多可以轻松自动化的重复步骤,例如构建和签署新的应用程序文件,登录Google Play Console并上传文件。
因此,实现此目的的最有效方法是自动化将应用程序发布到Google Play商店的过程。
在本教程中,我将向您展示如何使用Fastlane和Gihtub 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
)。
执行命令后,您会注意到已创建了一个新文件夹。
在此文件夹中,将有两个文件-Appfile
和Fastfile
。
将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