Safie Engineers' Blog!

Safieのエンジニアが書くブログです

Androidチームにおける品質改善②〜アプリサイズの計測〜

Androidチームの品質改善の取り組みとして、今回はアプリサイズを計測した話をしたいと思います。

はじめに

頻繁にアプリを更新しているとある日突然「アプリのサイズが肥大化している」と気が付く時があります。

  • 新しいリソースファイルを追加した
  • 新しいライブラリを導入した

など原因は様々考えられますがこれがいつの時期から発生したのかを調べるのは一苦労です。

そうならない為にも今回は「ruler」を使用し継続的にアプリのサイズを監視できる仕組みを導入しました。

動作環境

  • Android Studio:Flamingo 2022.2.1 Patch 2
  • AGP:8.0.2
  • Gradle Version:8.0
  • ruler:1.4.0

rulerとは

rulerとは、Spotifyが公開しているGradle pluginです。 アプリのサイズはもちろんのこと、各モジュールと依存関係がどれくらいアプリのサイズに影響を与えているかを レポートで出力することができるプラグインです。

rulerの導入方法

settings.gradleの編集

プロジェクト直下の「settings.gradle」を編集しrulerのプラグインを追加します。

pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }

    //追加
    resolutionStrategy {
        eachPlugin {
            if (requested.id.id == "com.spotify.ruler") {
                useModule("com.spotify.ruler:ruler-gradle-plugin:1.4.0")
            }
        }
    }

}
dependencyResolutionManagement {
//省略
}

参考:https://github.com/spotify/ruler/issues/85

app/build.gradleの編集

app/build.gradleにrulerの設定を追記します

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'com.spotify.ruler' //追加
}

android {
//省略
}

dependencies {
//省略
}

//追加 環境に応じて設定値は変更してください。
ruler {
    abi.set("arm64-v8a")
    locale.set("ja_JP")
    screenDensity.set(480)
    sdkVersion.set(33)
}

analyzeタスクの実行

ここまで上手くいくとGradleタスクに「analyzeBundle」のタスクが追加されています。 このタスクを実行するとアプリサイズを計測したHTMLとJSONのレポートが出力されます。

継続的に計測する

いつアプリのサイズが肥大化したのか継続的に監視する為にrulerのタスクをGithub Actionsのワークフローに取り入れ 出力したJSONファイルを解析し内製のダッシュボードに記録ことで監視する仕組みを導入しました。

ワークフロー

以下実際に作成したものから抜粋したワークフローです。
Kotlin Script「sendAppSizeToDashboard.main.kts」でJSONを解析し結果を内製のダッシュボードに送信するという仕組みを作りました。

name: Output App Size Task

on:
  push:
    paths:
      - 'app/**'
    branches:
      - main

jobs:
  rulerJob:
    name: Exec ruler
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'
          cache: gradle

      - name: Make gradlew executable
        run: chmod +x ./gradlew

      - name: Run ruler
        run: ./gradlew analyzeStagingDebugBundle

      - name: Make scripts executable
        run: chmod -R +x ./.github/workflows/scripts

      #rulerの結果を内製ダッシュボードに送信するスクリプトを実行
      - name: Send dashboard
        env:
          TZ: 'Asia/Tokyo'
        run: ./.github/workflows/scripts/sendAppSizeToDashboard.main.kts

計測したデータ

計測データを元に数値をグラフで可視化

最後に

今回の取り組みでは

  • rulerを使用した継続的なアプリサイズの計測

という環境を作りました。
以下の記事によると「アプリのサイズはインストール率に影響している」との事なので、もし「アプリのサイズを計測したい」と思った際に本記事が少しでも参考になれば幸いです。

developer.android.com

また、セーフィーではエンジニアの採用を積極的に行っております。もし興味が出てきた際はぜひご応募いただけたらと思います。

safie.co.jp

© Safie Inc.