Android Skills R8 Analyzer实战自动揪出冗余keep rules让APK体积瘦身50%【免费下载链接】skills项目地址: https://gitcode.com/gh_mirrors/skills27/skillsAndroid Skills 中的R8 Analyzerperformance/r8-analyzer/SKILL.md是一款面向 AI Agent 的技能包它能自动分析你的proguard-rules.pro揪出冗余 keep rules、过宽的全包规则和全局禁用优化规则帮你安全地给 APK 瘦身——官方场景就是让 R8 真正发挥混淆、裁剪与优化能力体积优化幅度最高可达 50%。为什么 keep rules 是 APK 体积的隐形杀手R8 是 Android 构建工具链中负责**代码混淆Obfuscation、裁剪Shrinking和优化Optimization**的核心引擎。它默认会删除未使用的类、字段、方法并合并重命名符号以压缩 DEX 体积。但现实中很多开发者为了保险在配置里堆了大量 keep 规则-dontshrink/-dontobfuscate/-dontoptimize直接全局关闭 R8 的核心优化APK 瞬间回生-keep class com.example.package.** { *; }把整个包下所有类和成员全部钉死R8 对此包无能为力为 Activity、Fragment、ViewModel 单独写 keepAAPT2 和 R8早已自动处理清单与布局中声明的组件这些规则纯属多余为 AndroidX、Kotlin、Gson 等库手写 keep这些库的 AAR/JAR 里自带 consumer keep rules手写规则往往比官方版本更宽反而有害。这些问题规则累积起来会让 R8 的可优化代码比例Optimization score持续走低。你以为是包越来越大其实是被自己写死的规则拖住了。R8 Analyzer 是如何工作的3条分析路径该技能的核心价值在于它不靠猜而是按你的工具链版本选择最精确的分析路径全部定义在 SKILL.md 中。路径一配置检查与版本识别所有路径的第一步Agent 会先扫描build.gradle、build.gradle.kts、gradle.properties与libs.versions.toml对照 references/CONFIGURATION.md 检查release 构建类型是否启用了minifyEnabled与shrinkResources是否使用了官方推荐的proguard-android-optimize.txtgradle.properties中是否残留android.enableR8.fullModefalse这会关闭 R8 Full Mode损失大量优化AGP 版本低于 9.0 时建议升级以获得构建性能优化。路径二定量分析推荐数据说话条件路径说明AGP ≥ 9.3.0Path A运行独立 Gradle 任务analyzeReleaseR8Config产出 protobuf 报告再转换为 JSON 定量分析AGP 9.3.0 且 R8 ≥ 9.3.7-devPath B执行 references/CONFIGURATION-ANALYZER.md 中的命令通过构建参数 dump R8 配置分析数据以上均不满足Path C启发式人工评估 规则库比对定量路径的优势在于每条 keep 规则都有实测数据支撑——它保住了多少类/字段/方法、占代码库百分比Agent 会把这些指标直接写入tmp/keepradius/analysis_result.txt而不是凭经验猜测。路径三启发式评估老项目兜底工具链较老时Agent 会逐条审阅proguard-rules.pro比对 references/REDUNDANT-RULES.md 中的坏规则清单并结合 references/KEEP-RULES-IMPACT-HIERARCHY.md 的规则影响层级做优先级排序。规则影响层级一眼看懂哪条规则最伤KEEP-RULES-IMPACT-HIERARCHY 文档把 keep 规则按钉死范围从宽到窄分为 9 级最典型的几类重灾区全包通配第 1 级最严重-keep class com.example.package.** { *; }让包内所有类连成员都无法优化必须细化到具体类取反运算符第 2 级-keep class !com.example.MyClass{*;}会保住整个 App 除了这一个类的所有代码属于典型误用类 通配成员第 3 级-keep class com.example.MyClass { *; }钉死整个类及其全部成员仅类名保留第 7 级-keep class com.example.MyClass只保类名R8 仍可清理未使用方法友好得多。结论很直接规则越靠上杀伤面积越大瘦身收益也越高。常见冗余规则清单照着自查references/REDUNDANT-RULES.md 沉淀了标准 Android 开发与主流库的高频坏规则包括全局禁用规则-dontshrink、-dontobfuscate、-dontoptimize必须删除Android 组件规则为 Activity、Service、View、Fragment 回调写的 keepAAPT2 自动处理删官方库规则androidx.**、kotlinx.**、kotlin.**的全包 keep依赖库自带 consumer rules删Gson 重灾区整包保留 POJO、全局保留TypeAdapter实现、处理TypeToken泛型擦除的规则——都会阻止 R8 删除死代码与未用成员建议移除或细化。对于真正需要反射的场景references/REFLECTION-GUIDE.md 给出了 7 类场景的精准规则写法Class.forName按类名加载、::class.java传递类引用、注解驱动反射、软依赖探测、私有成员访问、手写 Parcelable、枚举混淆等每种都附查找特征 建议规则用最小的 keep 面解决最大的兼容问题。分析报告长什么样4 个分数 逐条行动项无论走哪条路径最终都会按 references/REPORT_FORMAT.md 输出一份结构化的 Markdown 报告包含优化总结Optimization Summary优化分数、裁剪分数、混淆分数三个百分比直接告诉你多大比例代码被 keep 规则保护、R8 动不了Keep rules 评估逐条列出规则保住了多少项类/字段/方法数量与占比、典型受影响类名并给出明确行动——Remove删除冗余或Refine细化为精准规则被包含的冗余规则Subsumed Rules被更宽规则覆盖的僵尸规则直接删除历史对比若存在上一份报告会汇总分数变化例如裁剪分数从 61% 提升到 84%让瘦身进度可追踪。另外技能内置了一条重要约束只研究与建议绝不直接改动你的文件——所有删除/细化操作都由你人工确认后执行安全可控。实操上手从安装到拿到报告一键安装 r8-analyzer 技能仓库根目录 README.md 说明了统一安装方式使用 Android CLI 安装到当前项目android skills add --skillr8-analyzer --project.安装后Agent 会自动激活该技能。你只需在对话中提出需求例如帮我分析 APK 体积优化 R8 配置Agent 就会自动走完整流程。三步拿到瘦身报告配置体检Agent 扫描构建脚本确认 Full Mode 已开启、资源压缩已启用依据 CONFIGURATION.md数据生成按版本执行对应路径——新版本跑./gradlew :app:analyzeReleaseR8Config再转换为 JSON 与定量结果CONFIGURATION-ANALYZER.md报告输出严格按 REPORT_FORMAT.md 输出原始 Markdown 报告无废话填充方便你直接存档或提交给团队评审。验证改动用基准测试兜底技能建议对任何规则改动用Macrobenchmark UI Automator参考 references/android/training/testing/other-components/ui-automator.md做启动性能与 UI 验证确保删规则没有破坏反射、序列化等运行时行为。收益预期哪些场景瘦身最明显结合技能文档中的规则影响分析收益最大的场景包括历史包袱重的老项目proguard-rules.pro里堆了几年保险规则清理后裁剪分数往往大幅提升重度使用 Gson/第三方库删除整包 POJO keep 后未使用的数据模型与 getter/setter 全部可被 R8 剥离误用全局禁用规则仅删除一行-dontobfuscate就可能让 DEX 体积下降数个百分点包级通配泛滥把package.**细化到具体类是层级文档中公认必须避免、收益最高的一类修改。当然实际比例取决于项目自身建议以报告中优化/裁剪/混淆三个分数的前后对比为准。写在最后R8 Analyzer 的思路很清晰先用工具链版本选准分析路径再用定量数据或规则库逐条评估最后给出可执行、可验证的瘦身清单。它不替你改一行代码但会让每一条删还是不删的决策都有数据背书。如果你想深入了解可继续查阅技能目录下的完整资料技能主流程performance/r8-analyzer/SKILL.md定量分析命令performance/r8-analyzer/references/CONFIGURATION-ANALYZER.md坏规则清单performance/r8-analyzer/references/REDUNDANT-RULES.md规则影响层级performance/r8-analyzer/references/KEEP-RULES-IMPACT-HIERARCHY.md反射场景规则指南performance/r8-analyzer/references/REFLECTION-GUIDE.md报告格式规范performance/r8-analyzer/references/REPORT_FORMAT.md跑完一次分析把报告里的 Remove/Refine 清单逐条落实你的 APK 大概率会迎来一次实打实的瘦身。【免费下载链接】skills项目地址: https://gitcode.com/gh_mirrors/skills27/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
小型以太网组建实战:线序、IP配置与故障排查指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:45:44
LDO稳定性STB仿真从原理到实战:相位裕度、环路增益与补偿设计 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:45:44
Flask Templates 模板 在构建 Web 应用时,后端不仅需要处理业务逻辑,还需要将结果展示给前端用户。如果将所有内容混杂在视图函数中,代码将变得混乱、不易维护,尤其是在项目规模扩大后。模板的作用就是将“业务逻辑”与“展示内容”分离开来。模板文件中使用占位符表示动态内容,Flask 会在运行时… · 2026/9/24 13:45:37
12kW全GaN AIDC电源:三电平架构与磁集成技术解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 15:23:26
Jetson AGX Orin性能榨干指南:MAXN模式与jetson_clocks实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 15:23:20
MATLAB自适应啸叫抑制算法:LMS/NLMS/VMLMS仿真与评价 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 15:23:13
Arduino UNO驱动42步进电机:闭环控制告别丢步,精准调速实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 15:23:13
STM32无DAC怎么办?用PWM+RC滤波实现高精度模拟电压输出 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 15:23:00
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44