0
2

[Android]GithubActionsでリリースビルドapkをセキュアに作成する

Posted at

はじめに

Androidでリリースビルド(署名付き)をGithubActionsでapkを作成する方法を備忘録メモします。
今回は限定公開でアップしたいためapkの作成とします。
https://support.google.com/a/answer/2494992?hl=ja
※aabでもアップできるかもしれない。ドキュメントに記載がないので不明。

やり方は下記のサイトのものを使い手順通りに行います。
https://github.com/r0adkll/sign-android-release
※apk、aabファイルどちらも可能

セキュアに

keystoreファイル(jks)をリポジトリに入れた状態(コミット)はセキュアではない(privateであればさほど問題ではないが)ので、jksはリポジトリに入れず、解決する対応とします。

対応方法

1.jksを作成する

AndroidStudioでツールバーの「Build > Generate Signed Bundle or APK」から作成可能です。

それぞれpasswordやaliasを埋めて終わり
スクリーンショット 2024-04-10 18.43.31.png

2.Githubのリポジトリにシークレットキーを設定する

jksで作成した項目をそれぞれ対象のリポジトリの「Repository secrets」に登録します。フレーバーによって値が違う場合は「Environment secrets」でも可能。今回は「Repository secrets」とします。
スクリーンショット 2024-04-08 20.15.16.png

jksはbase64にする

openssl base64 < [jksファイルパス] | tr -d '\n' | tee some_signing_key.jks.base64.txt

※some_signing_key.jks.base64.txtファイルのbase64の値をコピーしてsecretに登録

3.GithubActionの設定

GithubActionでdispatchを使い、リリース版のapkを作成します。

下記のような形になります
releaseDirectoryのパスはフレーバーによって変更してる場合は変わる可能性があるので適時変更必要。

name: build release apk

on: [ workflow_dispatch ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: set up JDK 1.17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'
          cache: gradle
      - name: build Release
        run: ./gradlew assembleRelease
      - name: Sign app APK
        id: sign_app
        uses: r0adkll/sign-android-release@v1
        with:
          releaseDirectory: app/build/outputs/apk/release
          signingKeyBase64: ${{ secrets.SIGNING_KEY }}
          alias: ${{ secrets.ALIAS }}
          keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
          keyPassword: ${{ secrets.KEY_PASSWORD }}
        env:
          BUILD_TOOLS_VERSION: "34.0.0"
      - name: Upload Artifact
        uses: actions/upload-artifact@v3
        with:
          name: Signed app apk
          path: ${{steps.sign_app.outputs.signedReleaseFile}}

ちなみにassembleReleaseをbundleReleaseに変更してreleaseDirectoryのパスをbundleに合わせればaabファイルが作成されます。

さいごに

セキュアにするため、jksファイルサーバにあげたくない場合は、gitignoreにしてjksでローカルビルドする方法が考えられますが、手間がかかります。そのため今回のようにsecretにして自動化するとセキュアで楽になります。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2