r8-analyzer
GitHub分析 Android R8 混淆规则,识别冗余或过宽的配置以优化应用体积。通过检查构建配置并执行专用脚本生成分析报告,辅助开发者优化 ProGuard/R8 设置。
触发场景
安装
npx skills add android/skills --skill r8-analyzer -g -y
SKILL.md
Frontmatter
{
"name": "r8-analyzer",
"license": "Complete terms in LICENSE.txt",
"metadata": {
"author": "Google LLC",
"keywords": [
"R8",
"proguard",
"keep rules",
"app size",
"optimization",
"shrinking",
"minification",
"obfuscation"
],
"last-updated": "2026-10-24"
},
"description": "Analyzes Android build files and R8 keep rules to identify redundancies, broad package-wide rules, and rules that subsume library consumer keep rules. Use this skill when developers want to optimize their Android app's size, remove redundant or overly broad keep rules, or troubleshoot ProGuard configurations. Don't use for general Gradle build errors, Compose UI performance, or runtime CPU profiling."
}
Step 1. Setup and configuration check
- Inspect
build.gradle,build.gradle.kts, andgradle.properties. - Use references/CONFIGURATION.md to identify missing optimizations.
- AGP : If the version is lower than 9.3, suggest migration to 9.3 for the simplified
optimization {}DSL and the Configuration Analyzer task. - Full mode : Verify
android.enableR8.fullMode=falseis removed from thegradle.propertiesfile.
Step 2. Analysis path selection
-
Inspect
build.gradle,build.gradle.kts,settings.gradle,settings.gradle.kts,gradle.properties, andlibs.versions.tomlto get the AGP and R8 versions. An R8 version pinned insettings.gradle(.kts)replaces the R8 bundled with AGP. -
Find the app module (usually
app) and a build variant with R8 enabled (usuallyrelease). The following commands use them as<module>and<Variant>, for example:app:minifyReleaseWithR8. -
The helper scripts are in this skill's
scripts/directory. In the following commands,<skill_dir>is this skill's directory. Run every command from the project root. -
If AGP >= 9.3.0 : Proceed to Path A (Standalone Task).
-
If AGP < 9.3.0 : Proceed to Path B (Quantitative).
Path A: Standalone Gradle task (AGP >= 9.3.0)
- Step 1: Check requirements : Python and the
protobufpackage 6.33.4 or later are mandatory (used byscripts/keep_radius_pb2.py). Install it withpip install "protobuf>=6.33.4"; versions lower than 6.33.4 fail on import with aVersionErrororImportError. - Step 2: Run standalone task on R8-enabled build : For the module and variant you found during path selection, run
./gradlew :<module>:analyze<Variant>R8Config(for example,./gradlew :app:analyzeReleaseR8Config). It generates the report in<module>/build/reports/r8/(for example,app/build/reports/r8/r8-config-analyzer-release.pb). You must wait for this command to finish before proceeding. - Step 3: Convert to JSON : You must explicitly run the conversion script
scripts/convert_pb_to_json.pyaspython3 <skill_dir>/scripts/convert_pb_to_json.pywith arguments<module>/build/reports/r8andtmp/keepradius/keepruleradius.json. Wait for this command to finish. - Step 4: Analyze : You must explicitly run the analysis script
scripts/analyze.pyby executingpython3 <skill_dir>/scripts/analyze.py tmp/keepradius/keepruleradius.json. This outputstmp/keepradius/analysis_result.txt. Wait for this command to finish.
Path B: Invoke R8 release build (AGP < 9.3.0)
- Step 1: Check requirements : Python and the
protobufpackage 6.33.4 or later are mandatory:pip install "protobuf>=6.33.4". - Step 2: Generate and analyze : You must run the shell commands described in references/FULL_BUILD_CONFIG_ANALYZER.md to temporarily update the R8 version in
settings.gradle(.kts)to 9.4.34 or later (so R8 generates the report), generate the proto report intmp/r8analysis/, convert it totmp/r8analysis/keepruleradius.json, analyze the result, and revert the temporarysettings.gradle(.kts)change. - Step 3: Analyze : Verify that the analysis outputs
tmp/r8analysis/analysis_result.txtfor scores and rule impact metrics.
Step 3. Report generation
- Format : Follow references/REPORT_FORMAT.md strictly.
- Redundant rules : Check keep rules against references/INSPECT-RULES.md. If a keep rule matches a pattern in references/INSPECT-RULES.md, include the guidance and remediation from that reference alongside the impact metrics.
- Input : Extract metrics (Scores, Impacts, Example Classes, rule origins) directly from the generated file
tmp/keepradius/analysis_result.txtif using Path A, ortmp/r8analysis/analysis_result.txtif using Path B. - Output : Short progress updates are fine while Gradle runs; the final message is the report only. Output only the raw Markdown report in the chat. Do not output conversational filler (for example, "Here is your report..."). Do not provide recommendations, next steps, or any other text outside of the sections defined in references/REPORT_FORMAT.md. Do not mention the path used for analysis of the configuration.
Constraints
- Strict output limit: The final output must strictly be the Markdown report and nothing else.
- No code changes : Research and suggest only; do not modify project files. Create files only under
tmp/(analysis output, the settings backup, and any scratch scripts), and never write the report to a file. The one exception is the temporary R8classpathinsettings.gradle(.kts)that Path B needs when the project doesn't already pin R8 9.4.34 or later: ask the user first when running interactively, and revert it after the analysis (see references/FULL_BUILD_CONFIG_ANALYZER.md). If that change is needed but the user says no, or asks you not to edit build files, report rule-level and build file findings without scores and say why. - No placeholder scores : Never print
N/A%as a score. - No redundancy: Do not explain R8 benefits or reference skill internal files in the report.
- Focus: Omit sections (for example, Subsumed Rules, Configuration) if no issues or items are found.
版本历史
-
6daa53e
当前 2026-11-02 23:10
升级 AGP 迁移建议版本至 9.3,新增 libs.versions.toml 检查及 protobuf 版本要求,简化路径选择逻辑。
- 42dc227 2026-09-27 23:11
-
bac232f
2026-09-09 05:41
无版本变更内容
- aaca635 2026-08-27 20:08
-
6685cac
2026-08-19 22:25
新增对AGP版本的路径分支支持,区分AGP>=9.3.0的独立任务模式与其他版本的定量/启发式分析路径;细化了各路径下的具体执行步骤和依赖检查。
- 47e1dff 2026-07-24 22:27


