アプリを開発していると、導入したライブラリの影響等で知らぬ間に意図しないpermission要求が含まれていたり、バイナリのサイズが大きくなってしまうことはよくあります。
例えば
com.android.installreferrer:installreferrer:1.1
の追加には、意図しないパーミッション要求が追加されてしまう現象がありました。
master ブランチへのマージを契機に、これらをチェックする GitHub Actions のアクションを書いてみました。Android SDK ツールに含まれる apkanalyzer を利用しています。
(ビルド時間が気にならないなら、マージされてしまってからチェックするのではなく、プルリクエスト作成時にチェックした方がよいと思います。)
name: Inspect apk
on:
push:
branches:
- master
env:
# apkanalyzer で出力される順に定義しておく
KNOWN_PERMISSIONS: "android.permission.INTERNET, android.permission.ACCESS_NETWORK_STATE, android.permission.ACCESS_WIFI_STATE"
ALLOWED_DOWNLOAD_SIZE: 10485760 # 10M
jobs:
inspect:
name: Inspect apk
runs-on: macos-10.15 # Ubuntuだとapkanalyzerが含まれないので
steps:
- name: Check out
uses: actions/checkout@v1
- name: Set up JDK
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Build with Gradle
run: ./gradlew assembleRelease
- name: Inspect apk
run: |
has_error=false
known_permissions=$(echo $KNOWN_PERMISSIONS | tr -d ' ') # スペースを削除
apk_permissions=$($ANDROID_HOME/tools/bin/apkanalyzer manifest permissions app/build/outputs/apk/release/app-release.apk)
apk_permissions=$(echo $apk_permissions | tr ' ' ',') # 出力を1行にしスペースをカンマへ置換
if [[ $known_permissions != $apk_permissions ]]; then
echo "::error::Incorrect permissions"
has_error=true
fi
allowed_download_size=$ALLOWED_DOWNLOAD_SIZE
apk_download_size=$($ANDROID_HOME/tools/bin/apkanalyzer apk download-size app/build/outputs/apk/release/app-release.apk)
if let "allowed_download_size < $apk_download_size"; then
echo "::error::Download size too large"
has_error=true
fi
if "$has_error"; then
exit 1
fi
job を失敗させているので、リポジトリの watch をしていれば GitHub の通知(Notificaton)で失敗を検知できそうですが、ステータスバッジ をリポジトリの README.md へ貼っておいたり、次のように失敗時に何かしらの通知するstepを追加してもよいでしょう。
steps:
- name: Inspect apk
...
- name: Notify failure
if: failure()
...
もし Slack へ通知する場合はこちらを参考にしてください ⇒ GitHub Actions で Slack に通知をお手軽に送る