はじめに
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」から作成可能です。
2.Githubのリポジトリにシークレットキーを設定する
jksで作成した項目をそれぞれ対象のリポジトリの「Repository secrets」に登録します。フレーバーによって値が違う場合は「Environment secrets」でも可能。今回は「Repository secrets」とします。
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にして自動化するとセキュアで楽になります。