どうもこんばんわ。
創作彼女の恋愛公式 攻略しました。
ゆめみちゃんが可愛かったです。アペンド配信まだですか!!!!
表情いっぱいあるのかわいい。
共通が長いのが好きな方はどうぞ、わたし的には個別長いほうが良いかな
(え?グランドエンディング?...アペンド配信に期待)
本題
GitHub ActionsでAndroidのリリースAPKを作成したい!
releaseブランチへpushしたら勝手にAPK作ってくれるようにしたい!
GitHub Actions
このブログでも何回か登場してるやつ。
ビルド作業とかを自分のPCじゃなくてGitHubのマシンでやらせることができる。
しかもパブリックリポジトリなら無料!。
今回はこれを使ってそこそこ時間のかかるAPK作成をGitHub Actions(他の人のPC)にやらせます!
build.gradle.kts
今回はkts
へ移行したbuild.gradle.kts
を利用します。
build.gradle
の場合はコピペで動かないと思います;;
流れ
- (APK生成時のコードを管理しておく)releaseブランチを作成
build.gradle.kts
を編集してコマンドラインからAPKを作成して署名できるようにする
- 署名ファイルをBase64にする
GitHub Actions
を組む
- releaseブランチをpushする
つくる
releaseブランチを作成
今回はrelease
ブランチを作成して、このブランチに対してpushがあった際に自動でAPKを作成するようにします。
APKを作成したい場合はこのブランチへmasterの中身をマージしてpushすれば良いわけなんですね。
(もし最初からあるmasterブランチをpushするたびにapkを作りたい場合はこれの作業はいらない)
build.gradle.ktsへ署名関係のプロパティを設定
appフォルダにあるbuild.gradle.kts
を開きます。
build.gradle
をお使いの方はすいませんわからないです(Kotlinしか分からんしKotlinも分からん)
そしてコピペしてください。
一番上のimport java.util.*
はBase64のデコードを行うために必要です。
雑な解説的な
署名に使うパスワードとかは環境変数から取得するようにしました。
build.gradle.kts
へ直接書くとパスワードが誰でも見れてしまうので大問題です。
じゃあどこにパスワードを保存しておくかという話ですが、GitHubのSecret機能にパスワードなんかの機密情報を登録しておきます。
そしてGitHub Actionsの環境変数をセットする際にSecretの値を使うことで、安全にパスワードを渡すことが出来ます。
でも署名ファイルをどうやって渡すのかというのが問題になります。パスワードは文字列でしたが今回はファイルです。
この問題を解決するのがBase64
です。これを利用することでファイルをよく分からん文字列に変換してくれます(その逆も可)。文字列になったらこっちのものです。
なのでSecretへ文字列になった署名ファイルを登録しておいて、
ビルド時に文字列から署名ファイルを作成することで安全に署名ファイルも管理できました。
他の例だと、Base64へのエンコード/デコードをコマンドラインにやらせてる例がありますが、なんかbuild.gradle.kts
の中でいい感じに変換できたのでこれで行きます。
署名ファイルをBase64にする
Androidアプリの署名で使ってるkeystore.jks
みたいなファイルをBase64に変換します。
Windowsの標準機能でBase64に変換できるみたいなのでやってみましょう。
適当なフォルダでPowerShellとかを開いてコマンドを叩きます
certutil -encode {署名ファイルのパス} encode.txt
コマンドを叩くとencode.txt
が出来てると思うので開いて、
-----BEGIN CERTIFICATE-----
、-----END CERTIFICATE-----
を消して
改行も消します。
消せたらコピーします。
GitHub の Secret へ登録
リポジトリの Secrets > Actions へ進みます。
そしてこの中に署名で使うパスワード等を保存していくわけですが、
さっきのbuild.gradle.kts
をパクった場合の名前と値の対応表です↓
名前変えた場合はそれぞれ変えて...
New repository secretから追加できます。
名前 | 入れる中身 |
---|
ENV_SIGN_KEYSTORE_BASE64 | Base64にした署名ファイル |
ENV_SIGN_KEY_ALIAS | Key alias |
ENV_SIGN_KEY_PASSWORD | Key password |
ENV_SIGN_STORE_PASSWORD | Key store password |
もしパクった場合はSecretはこうなります
GitHub Actions を作成する
GitHubのリポジトリにあるActions
から新しいワークフローを作成します。
テンプレ置いておくので皆さんは Simple workflow を選んでいいですよ。
そしてAPKを作成するワークフローはこちらです!!!
もしブランチ名が違う場合は branches: [ release ]
と ref: 'release'
のrelease
の部分を各自書き換えてください。(master
とか?)
GitHubのSecretは勝手に環境変数にはならないので、env
で定義する必要があります。
出来たらコミット+プッシュしましょう。
release ブランチを push してみる
(releaseブランチをGitHub Actionsのトリガーにしていた場合)
releaseブランチに切り替えて、pushしてみます。
これで動き始めるはず。Actionsタブへ移動します。
手動実行ボタンを使う
pushせずに動かすことが出来ます。ここをポチッと
APKもちゃんとアーティファクトの欄にありますね。
これで自分のPCへ負荷をかけずにAPKを作ることが出来ました。やったー
おまけ 自分のPCで確認する編
Windows以外は知りません
Android Studioのターミナルを開きます。
環境変数の設定をします。{}
の部分は各自違うと思うのでそれぞれ入れてください
確認のためにset
を叩くと環境変数一覧を見ることが出来ます
set
パスワードとかに間違いがなければ以下のコマンドを入力します
gradlew assembleRelease
終わると app/build/outputs/apk/release
の中にAPKが出来ていると思います。
終わりに
最低限の build.gradle.kts 置いておきます。