r8-analyzer について
r8-analyzer は、Android 開発者向けに R8 の設定や keep ルール、その影響を評価するスキルです。プロジェクトの AGP バージョンに応じて分析手順を選び、生成された指標を基に Markdown レポートを作成します。
主な機能
- 01Gradle と R8 の設定確認
- 02AGP バージョンに応じた分析経路の選択
- 03keep ルールの影響指標の分析
- 04冗長な keep ルール候補の検出
- 05構造化された Markdown レポートの生成
活用シーン
- 01Android プロジェクトの R8 設定の確認
- 02R8 ビルドへの keep ルールの影響測定
- 03冗長な keep ルール候補の特定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ android/ skills --skill r8-analyzerインストール後、Claude Code で/r8-analyzerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/CONFIGURATION.mdFULL_BUILD_CONFIG_ANALYZER.mdINSPECT-RULES.mdREPORT_FORMAT.mdreferences/android/topic/performance/app-optimization/enable-app-optimization.mdscripts/analyze.pyconvert_pb_to_json.pykeep_radius_pb2.py詳細
ステップ 1. セットアップと構成の確認
build.gradle、build.gradle.kts、gradle.propertiesを調べます。- references/CONFIGURATION.md を使用して、不足している最適化を特定します。
- AGP:バージョンが 9.3 未満の場合は、簡素化された
optimization {}DSL と Configuration Analyzer タスクを利用するため、9.3 への移行を提案します。 - Full mode:
gradle.propertiesファイルからandroid.enableR8.fullMode=falseが削除されていることを確認します。
ステップ 2. 分析パスの選択
-
build.gradle、build.gradle.kts、settings.gradle、settings.gradle.kts、gradle.properties、libs.versions.tomlを調べ、AGP と R8 のバージョンを確認します。settings.gradle(.kts)で固定された R8 のバージョンは、AGP にバンドルされている R8 に置き換わります。 -
アプリモジュール(通常は
app)と、R8 が有効になっているビルドバリアント(通常はrelease)を見つけます。以下のコマンドでは、これらを<module>と<Variant>として使用します。たとえば、:app:minifyReleaseWithR8です。 -
ヘルパースクリプトは、このスキルの
scripts/ディレクトリにあります。以下の コマンドでは、<skill_dir>はこのスキルのディレクトリです。すべてのコマンドを プロジェクトのルートディレクトリから実行します。 -
AGP >= 9.3.0 の場合:**パス A(スタンドアロンタスク)**に進みます。
-
AGP < 9.3.0 の場合:**パス B(定量分析)**に進みます。
パス A:スタンドアロンの Gradle タスク(AGP >= 9.3.0)
- ステップ 1:要件の確認:Python と
protobufパッケージ 6.33.4 以降が必須です(scripts/keep_radius_pb2.pyで使用)。pip install "protobuf>=6.33.4"でインストールします。6.33.4 未満のバージョンでは、インポート時にVersionErrorまたはImportErrorが発生します。 - ステップ 2:R8 が有効なビルドでスタンドアロンタスクを実行:パスの選択時に確認したモジュールとバリアントに対して、
./gradlew :<module>:analyze<Variant>R8Config(例:./gradlew :app:analyzeReleaseR8Config)を実行します。レポートは<module>/build/reports/r8/(例:app/build/reports/r8/r8-config-analyzer-release.pb)に生成されます。続行する前に、このコマンドの完了を待つ必要があります。 - ステップ 3:JSON に変換:変換スクリプト
scripts/convert_pb_to_json.pyを、python3 <skill_dir>/scripts/convert_pb_to_json.pyとして、引数<module>/build/reports/r8およびtmp/keepradius/keepruleradius.jsonを指定して明示的に実行する必要があります。このコマンドの完了を待ちます。 - ステップ 4:分析:分析スクリプト
scripts/analyze.pyを、python3 <skill_dir>/scripts/analyze.py tmp/keepradius/keepruleradius.jsonを実行して明示的に実行する必要があります。これによりtmp/keepradius/analysis_result.txtが出力されます。このコマンドの完了を待ちます。
パス B:R8 リリースビルドの実行(AGP < 9.3.0)
- ステップ 1:要件の確認:Python と
protobufパッケージ 6.33.4 以降が必須です。pip install "protobuf>=6.33.4"を実行します。 - ステップ 2:生成と分析:references/FULL_BUILD_CONFIG_ANALYZER.md に記載されているシェルコマンドを実行し、レポートを R8 に生成させるために
settings.gradle(.kts)の R8 バージョンを一時的に 9.4.34 以降に更新します。次に、proto レポートをtmp/r8analysis/に生成し、tmp/r8analysis/keepruleradius.jsonに変換して、結果を分析し、一時的に変更したsettings.gradle(.kts)を元に戻します。 - ステップ 3:分析:スコアとルールの影響指標を確認できるよう、分析結果が
tmp/r8analysis/analysis_result.txtに出力されることを確認します。
ステップ 3. レポートの生成
- 形式: references/REPORT_FORMAT.md に厳密に従ってください。
- 重複ルール:keep ルールを references/INSPECT-RULES.md と照合してください。keep ルールが references/INSPECT-RULES.md のパターンに一致する場合は、影響指標と併せて、その参照先に記載されたガイダンスと修正方法を含めてください。
- 入力:Path A を使用する場合は
tmp/keepradius/analysis_result.txt、Path B を使用する場合はtmp/r8analysis/analysis_result.txtから、指標(Scores、Impacts、Example Classes、rule origins)を直接抽出してください。 - 出力:Gradle の実行中に短い進捗報告をしてもかまいませんが、最終メッセージにはレポートのみを出力してください。チャットには生の Markdown レポートのみを出力してください(「レポートはこちらです……」などの会話的な前置きは出力しないでください)。references/REPORT_FORMAT.md で定義されたセクション以外に、推奨事項、次の手順、その他のテキストを記載しないでください。設定の分析に使用したパスについて言及しないでください。
制約
- 出力の厳格な制限:最終出力には Markdown レポートのみを含め、それ以外は一切出力しないでください。
- コード変更禁止:調査と提案のみを行い、プロジェクトファイルは変更しないでください。ファイルの作成は
tmp/配下(分析出力、設定のバックアップ、一時的なスクリプト)のみにしてください。また、レポートをファイルに書き込まないでください。唯一の例外は、プロジェクトで R8 9.4.34 以降がすでに固定されていない場合に Path B で必要となる、settings.gradle(.kts)内の一時的な R8classpathです。対話形式で実行している場合は、変更前にユーザーに確認し、分析後に元に戻してください(references/FULL_BUILD_CONFIG_ANALYZER.md を参照)。この変更が必要でユーザーが拒否した場合、またはビルドファイルを編集しないよう求めた場合は、スコアを示さずにルール単位の調査結果とビルドファイルの調査結果を報告し、その理由を記載してください。 - プレースホルダーのスコア禁止:スコアとして
N/A%を絶対に出力しないでください。 - 重複説明の禁止:R8 の利点を説明したり、スキルの内部ファイルに言及したりしないでください。
- 焦点:問題や該当項目がないセクション(たとえば、Subsumed Rules、Configuration)は省略してください。