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 涨得快、哪个第三方库吃方法吃得凶,一眼就能看出来。

README区域截图

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 是当前主线版本。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐