美文网首页android团战兵器高级Android知识
有效减少 Android 应用的方法数

有效减少 Android 应用的方法数

作者: 极小光 | 来源:发表于2017-04-11 15:16 被阅读200次

简评:65k 限制确实是个令人不爽的事情,这里就让你知道是哪些库用了大量的方法,并该

现在的应用越来越大,方法数经常达到 65k 限制。这里就介绍下如何可视化 library 方法数和减少方法数的方法。

可视化方法数

可视化各 library 方法数的简单办法就是使用 Dexcount Gradle Plugin,只需要在 app/build.gradle 中简单的集成:

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 之前,有必要考虑其方法数,原因有二:

  1. 更换现有程序中已使用的库非常有挑战性,所以最好之前就想好。
  2. 很多人引入了一个很大的 library,但只是为了做很简单的事(Strings.isNullOrEmpty()),通常你都用不到 library 的所有方法。

这里可以用 methodscount.com 来查询常用库的方法数。

对于一个功能,通常都会有好几个库能完成这一个功能。这里以图片加载为例:



这些库都有各自的优缺点,所以清楚了解自己的需求,并选择库很有必要。

那对于已经使用的库,有没有办法来减少方法数呢?

我们可以用 Proguard 来剔除库中未使用的部分。这里我们用 Guava 来举例,首先我们需要知道项目实际用到了哪些部分,在 src 文件夹下运行下面的命令:

grep -roh . -e 'com.google.common.*' | sort | uniq

也就是根据库的前缀来查找所有的 import 语句(对于 Guava 来说就是 com.google.common)。

之后,创建一个 Proguard 配置:

-dontoptimize
-dontobfuscate

-keep public class com.google.common.base.** {
    public *;
}

-keep public class com.google.common.collect.** {
    public *;
}

-keep public class com.google.common.primitives.** {
    public *;
}

-keep public class com.google.common.util.** {
    public *;
}
...

执行一个 Gradle 脚本,就可以生成一个缩小版的库,再将其复制到项目的 libs 文件夹中进行使用。

上面的技巧一定要谨慎使用,因为是我们手动执行的,所以更容易出错,一定要多多测试。
详细用法可以进一步参考作者的项目

原文:EFFICIENTLY REDUCING YOUR METHOD COUNT
欢迎关注知乎专栏「极光日报」,每天为 Makers 导读三篇优质英文文章。

延伸阅读

相关文章

网友评论

本文标题:有效减少 Android 应用的方法数

本文链接:https://www.haomeiwen.com/subject/teuyattx.html