3
1

More than 3 years have passed since last update.

GitHub Actions でapkファイルを検査する

Last updated at Posted at 2020-03-08

アプリを開発していると、導入したライブラリの影響等で知らぬ間に意図しない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 に通知をお手軽に送る

3
1
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
3
1