关于 r8-analyzer
r8-analyzer 是面向 Android 开发者的技能,用于评估 R8 配置、keep 规则及其影响。它根据项目的 AGP 版本选择分析流程,并依据生成的指标输出 Markdown 报告。
主要功能
- 01检查 Gradle 与 R8 配置
- 02按 AGP 版本选择分析流程
- 03分析 keep 规则影响指标
- 04识别可能冗余的 keep 规则
- 05生成结构化 Markdown 报告
适用场景
- 01检查 Android 项目的 R8 设置
- 02衡量 keep 规则对 R8 构建的影响
- 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,建议迁移到 9.3,以使用简化的
optimization {}DSL 和 Configuration Analyzer 任务。 - 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 和 6.33.4 或更高版本的
protobuf包(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 和 6.33.4 或更高版本的
protobuf包:pip install "protobuf>=6.33.4"。 - 第 2 步:生成并分析:必须运行 references/FULL_BUILD_CONFIG_ANALYZER.md 中所述的 shell 命令,临时将
settings.gradle(.kts)中的 R8 版本更新至 9.4.34 或更高版本(以便 R8 生成报告),在tmp/r8analysis/中生成 proto 报告,将其转换为tmp/r8analysis/keepruleradius.json,分析结果,然后还原对settings.gradle(.kts)的临时更改。 - 第 3 步:分析:确认分析会输出
tmp/r8analysis/analysis_result.txt,其中包含评分和规则影响指标。
第 3 步:生成报告
- 格式:严格遵循 references/REPORT_FORMAT.md。
- 冗余规则:根据 references/INSPECT-RULES.md 检查 keep 规则。如果某条 keep 规则符合 references/INSPECT-RULES.md 中的某种模式,请在影响指标旁附上该参考文件中的指导和修正方法。
- 输入:如果使用路径 A,请直接从生成的文件
tmp/keepradius/analysis_result.txt中提取指标(分数、影响、示例类、规则来源);如果使用路径 B,则从tmp/r8analysis/analysis_result.txt中提取。 - 输出:Gradle 运行期间可以简短更新进度;最终消息只能包含报告。在聊天中仅输出原始 Markdown 报告。不要输出寒暄性内容(例如“以下是您的报告……”)。不要提供建议、后续步骤,也不要在 references/REPORT_FORMAT.md 定义的章节之外输出任何文本。不要提及用于分析配置的路径。
约束
- 严格限制输出:最终输出必须仅包含 Markdown 报告,不得包含其他内容。
- 不得修改代码:仅进行调研并提供建议;不要修改项目文件。只能在
tmp/下创建文件(分析输出、设置备份和临时脚本),绝不能将报告写入文件。唯一例外是:当项目尚未固定使用 R8 9.4.34 或更高版本时,路径 B 需要在settings.gradle(.kts)中临时添加 R8classpath:在交互式运行时,先询问用户,并在分析后还原(参见 references/FULL_BUILD_CONFIG_ANALYZER.md)。如果需要此更改但用户拒绝,或要求不要修改构建文件,则不提供评分,改为报告规则级和构建文件层面的发现,并说明原因。 - 不得使用占位分数:绝不要将
N/A%作为分数输出。 - 不得重复:不要解释 R8 的优势,也不要在报告中引用技能内部文件。
- 聚焦重点:如果没有问题或发现的条目,请省略相关章节(例如“被涵盖的规则”“配置”)。
评论
支持 Markdown