mcpField
R
r8-analyzer

r8-analyzer

github.com/android开发10.0k3.3k 次安装2 天前更新
代码仓库

关于 r8-analyzer

r8-analyzer 是面向 Android 开发者的技能,用于评估 R8 配置、keep 规则及其影响。它根据项目的 AGP 版本选择分析流程,并依据生成的指标输出 Markdown 报告。

主要功能

  1. 01检查 Gradle 与 R8 配置
  2. 02按 AGP 版本选择分析流程
  3. 03分析 keep 规则影响指标
  4. 04识别可能冗余的 keep 规则
  5. 05生成结构化 Markdown 报告

适用场景

  1. 01检查 Android 项目的 R8 设置
  2. 02衡量 keep 规则对 R8 构建的影响
  3. 03查找可能冗余的 keep 规则

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/android/skills --skill r8-analyzer

安装后在 Claude Code 中输入/r8-analyzer确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
CONFIGURATION.md
FULL_BUILD_CONFIG_ANALYZER.md
INSPECT-RULES.md
REPORT_FORMAT.md
references/android/topic/performance/app-optimization/
enable-app-optimization.md
scripts/
analyze.py
convert_pb_to_json.py
keep_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) 中临时添加 R8 classpath:在交互式运行时,先询问用户,并在分析后还原(参见 references/FULL_BUILD_CONFIG_ANALYZER.md)。如果需要此更改但用户拒绝,或要求不要修改构建文件,则不提供评分,改为报告规则级和构建文件层面的发现,并说明原因。
  • 不得使用占位分数:绝不要将 N/A% 作为分数输出。
  • 不得重复:不要解释 R8 的优势,也不要在报告中引用技能内部文件。
  • 聚焦重点:如果没有问题或发现的条目,请省略相关章节(例如“被涵盖的规则”“配置”)。

评论

支持 Markdown