Android 构建速度优化 – 2

这是我参与更文挑战的第25天,活动详情查看: 更文挑战

构建速度衡量标准

其他gradle.properties配置

除了配置给gradle分配的内存外,还可以通过添加下述配置使得构建加快:

#开启守护线程    
org.gradle.daemon=true    
#开启并行编译任务    
org.gradle.parallel=true    
#启用新的孵化模式     
org.gradle.configureondemand=true   

#开启 Gradle 缓存    
#gradle3.5版本之后,推出了新的cache机制,和Android studio2.3版本引入的BuildCache不一样,
#这个新的cache机制会缓存每个任务的输出,而build cache只会pre-dexed的外部库。  
org.gradle.caching = true

#使用构建缓存加快整洁构建的速度 
# https://developer.android.com/studio/build/build-cache.html
android.enableBuildCache=true
复制代码

另外,你还可以在下述目录中创建一个gradle.properties文件,全局生效,就不用每个项目都另外配置了

  • /home//.gradle/ (Linux)
  • /Users//.gradle/ (Mac)
  • C:\Users.gradle (Windows)

配置依赖包下载地址

就是使用阿国内阿里云的依赖下载地址替换Google依赖包下载地址,打开Project级别的build.gradle文件,添加阿里云的地址

repositories {
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
    maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
    ...
}

allprojects {
    repositories {
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
        ...
    }
}    

复制代码

升级Android Gradle Plugin 至3.0.0/3.3.0以上

每次 Android Gradle 插件的更新都会修复大量的 bug 及提升性能等新特性,因此保持最新的 Android Gradle 插件版本有非常大的必要。
因此有更高的稳定版本,我们应该是本着是能上则上的原则。
eg:

  • AndroidStudio3.0以后,能使用implementation依赖。
  • AndroidStudio3.0里有D8 dex编译引擎,而这一引擎将在AndroidStudio 3.1里成为默认的引擎。
  • Adroid Studio 3.3 中可以使用R8的下一代代码shrinker。它将减少无用的代码和资源,并缩小您的源代码。因此 Android Studio 声称构建时间和 APK 大小会更小。
  • Android Studio 3.5 版开始,可以使用 Apply Changes 功能来提高构建性能。

使用新的依赖和配置

| 新的配置

New Configuration 弃用配置 Deprecated configuration 行为 Behavior
implementation 执行 compile 编译 当你的模块配置一个implementation 依赖项时,让Gradle知道这个模块在编译的时候不需要把依赖项泄露给其他模块。也就是说,只有在运行时,依赖才可用于其他模块。使用这种依赖配置代替 api或compile可以导致显着的构建时间改进,因为它减少了构建系统需要重新编译的项目的数量。例如,如果一个 implementation依赖关系改变了它的API,Gradle只重新编译这个依赖项以及直接依赖它的模块。大多数应用程序和测试模块应使用此配置。
api 美国石油学会 compile 编译 当一个模块包含api依赖关系时,让Gradle知道模块想要将该依赖关系可传递地导出到其他模块,以便在运行时和编译时使用它们。这个配置的行为就像compile(现在已经被弃用了),你通常应该只在库模块中使用它。这是因为,如果api依赖项更改了外部API,Gradle会在编译时重新编译所有有权访问该依赖项的模块。所以,拥有大量的api依赖会增加构建时间。除非你想将一个依赖的API暴露给一个单独的测试模块,否则使用implementation 依赖。

也就是说在AndroidStudio3.0以后,能使用implementation的就使用implementation,implementation可以提高编译速度

开启D8编译

相比之前的DX编译引擎,谷歌的下一代编译引擎D8 dex编译引擎不仅仅提高了编译效率(体现在编译时间减少上),同时也减少了生成的.dex文件的大小。目前D8 dex编译引擎已经在android studio 3.0 里有,而这一引擎将在android studio 3.1里成为默认的引擎。可以在gradle.properties 文件里的android.enableD8设置成true即可使用D8 dex编译引擎。
使用 Java 8 语言特性会导致需要执行去语法糖操作,这将影响构建时间。然而,我们已经用 D8 降低了去语法糖操作的影响。

android.enableD8 = true
复制代码

离线编译

新版AS中设置已经去掉了,在下图的地方配置打开AS的Gradle的offline work选项
image.png
或者使用命令行

gradlew build --offline
复制代码

AS设置菜单中 Gradle配置

image.png

参考

纳尼?我的Gradle build编译只要1s

提升AS编译速度 [效率与工具]

优化AndroidStudio的构建速度

Gradle更小、更快构建APP的奇淫技巧

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享