简评:65k 限制确实是个令人不爽的事情,这里就让你知道是哪些库用了大量的方法,并该
现在的应用越来越大,方法数经常达到 65k 限制。这里就介绍下如何可视化 library 方法数和减少方法数的方法。
可视化方法数
buildscript {
repositories {
mavenCentral() // or jcenter()
}
dependencies {
classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.6.4'
}
}
// make sure this line comes *after* you apply the Android plugin
apply plugin: 'com.getkeepsafe.dexcount'
在项目中运行 ./gradlew assembleDebug 就会在 console 中输出:
并会在 build/outputs/dexcount/debugChart 中生成一个可交互的图形报告:
减少方法数
在我们选用 library 之前,有必要考虑其方法数,原因有二:
- 更换现有程序中已使用的库非常有挑战性,所以最好之前就想好。
- 很多人引入了一个很大的 library,但只是为了做很简单的事(Strings.isNullOrEmpty()),通常你都用不到 library 的所有方法。
对于一个功能,通常都会有好几个库能完成这一个功能。这里以图片加载为例:
这些库都有各自的优缺点,所以清楚了解自己的需求,并选择库很有必要。
那对于已经使用的库,有没有办法来减少方法数呢?
我们可以用 Proguard 来剔除库中未使用的部分。这里我们用 Guava 来举例,首先我们需要知道项目实际用到了哪些部分,在 src 文件夹下运行下面的命令:
grep -roh . -e | sort | uniq
之后,创建一个 Proguard 配置:
-dontoptimize
-dontobfuscate
-keep public class {
public *;
}
-keep public class {
public *;
}
-keep public class {
public *;
}
-keep public class {
public *;
}
...
执行一个 Gradle 脚本,就可以生成一个缩小版的库,再将其复制到项目的 libs 文件夹中进行使用。
延伸阅读: