文章目录
- Dexcount Gradle Plugin:给 APK 方法数做体检的 Gradle 插件
- 1、 这玩意儿是干嘛的
- 2、 为什么要用它
- 3、 怎么接入
- 4、 适合哪些场景
- 5、 一点背景
Dexcount Gradle Plugin:给 APK 方法数做体检的 Gradle 插件
Dexcount Gradle Plugin 在 GitHub 上已经拿到 3,075 Star 了。
KeepSafe 开源了这个 Gradle 插件,专门干一件事:统计 APK、AAR 或 Java 模块里的方法引用数量。配合 Android开发的日常构建流程,用它来盯住方法数的增长,别一不小心撞上 65,536 的天花板,到那时候要么割肉删方法,要么开 multidex,都是麻烦事。
1、 这玩意儿是干嘛的
就一件事:构建时报告 APK 里有多少方法引用。
Android 早期有个硬限制,单个 dex 文件最多 65,536 个方法引用。虽然现在 multidex 已经是常规操作,但方法数膨胀本身仍然是性能问题。方法数多,冷启动慢,包体大,dex 布局也乱。
Dexcount 在每次构建后吐一份报告,按包名分组列出方法数。哪个 package 涨得快、哪个第三方库吃方法吃得凶,一眼就能看出来。
2、 为什么要用它
做过大型 Android 项目的人都碰到过这种场景:业务跑得好好的,某天构建突然报Cannot fit requested classes in a single dex file。
排查半天才发现新引入的 SDK 一下子塞进来几万个方法。要早点看到方法数曲线,根本不会让事情走到这一步。
Dexcount 把方法数这件事可视化出来了。结合 CI 跑的话,每次提 PR 都能看到方法数变化,是涨了 50 个还是涨了 5,000 个,代码 review 时心里有数。
3、 怎么接入
插件在 Gradle Plugin Portal 上,ID 是com.getkeepsafe.dexcount,Maven Central 上的坐标是com.getkeepsafe.dexcount:dexcount-gradle-plugin:4.0.0。
环境要求:Java 11 以上、Gradle 7.0 以上、Android Gradle Plugin 7.0.0 以上。自己编译插件源码的话需要 Java 17。
根目录的build.gradle里加上 plugin:
plugins{id"com.getkeepsafe.dexcount"version"4.0.0"}跑一次assembleDebug,构建结束后会在build/outputs/dexcount下生成报告,有 txt、csv、html 三种格式,挑自己顺手的看。
4、 适合哪些场景
- 中大型 Android 项目,方法数已经接近 65,536,需要持续监控增长趋势
- 团队里多人协作,想在 PR 阶段就把方法数暴涨的问题拦下来
- 引入新第三方库之前,先评估它对 dex 容量的占用
- 老项目准备拆 dex 或开 multidex 之前,做一次完整的方法数普查
5、 一点背景
com.android.dexdeps这部分 Java 代码来自 Android 源码树,灵感来自 Mihail Parparita 的dex-method-counts项目。本质上就是把那个老牌命令行工具搬进了 Gradle 生态,跟现代 Android 构建流程贴合得更紧。
版权上归 Keepsafe Software, Inc,从 2015 年维护到现在,4.0.0 是当前主线版本。
上归 Keepsafe Software, Inc,从 2015 年维护到现在,4.0.0 是当前主线版本。