1、使用最新的Android gradle插件

Google tools team一直致力于提高android studio的编译速度,使用最新的gradle插件可以搞编译速度 在Android Gradle Plugin 3.0后,google推出了新的依赖方式,并强制要求废弃老的依赖方式,将原有的compile闭包方法,拆分成implementation,api以明确项目的依赖关系。
其中implementation仅对当前module依赖有效,api同compile,存在依赖的传递性。错误的使用则会导致依赖被加载两次,增加编译时间。
更多3.0之后的特性可以参考官方文档中的 Dependency configurations 部分:
https://developer.android.com/studio/build/dependencies

- compile 'com.android.support:appcompat-v7:27.1.1'
+ implementation 'com.android.support:appcompat-v7:27.1.1'

2、避免使用multidex

当minSdkVersion为21以下的时候的时候(不包含21),则编译时间会大大增加。我们可以通过定制开发版本编译minSdkVersion为21来提高开发效率,具体配置如下:

android {
defaultConfig {
...
multiDexEnabled
true
} productFlavors {
dev {
minSdkVersion 21
} prod {
minSdkVersion your_minSDKVersion
}
}
...
}

3、避免使用multi-APK(不常使用)

当需要针对不同的ABI或dpi做支持,使用spilts{}对工程生成不同apk时可以使用该方法。
在开发调试的时候,关闭splits功能,具体配置如下:

android {
...
if (project.hasProperty(‘devBuild’)){
splits.abi.enable = false
splits.density.enable =false
}
...
}

使用命令行构建时使用这个命令:

./gradlew assembleDevelopmentDebug -PdevBuild

当使用Android Studio构建可做以下配置:
打开Preferences -> Build, Execution, Deployment -> Compiler,再Command-line选项后填写-PdevBuild,如下图所示:

4、减少打包的资源文件

在我们进行开发调试的时候,没有必要对所有的资源文件进行编译,通常只选择一种可以减少编译时间,具体配置如下:

android{
...
productFlavors {
development {
minSdkVersion 21
//only package english translations, and xxhdpi resources
resConfigs (“zh”, “xxhdpi”)
}
}
...
}

5、禁用PNG压缩

android构建的时候默认开启了PNG压缩,在开发调试时,可以将PNG压缩关闭,具体配置如下:

android {
...
if (project.hasProperty(‘devBuild’)){
aaptOptions.cruncherEnabled = false
}
...
}

6、使用Instant run

andorid studio 3.0之后对instant run进行了很大的优化,之前的版本出现过更新的代码没有运行到手机上,所以一直关闭着。现在可以尝试使用。

7、不在gradle中定义动态变量

在开发调试的情况下,不要使用动态定义

// def buildDateTime = new Date().format(‘yyMMddHHmm’).toInteger()
def buildDateTime = project.hasProperty(‘devBuild’) ? 100 : new Date().format(‘yyMMddHHmm’).toInteger()
android {
defaultConfig {
versionCode buildDateTime
}
}

8、不要使用动态依赖版本

项目在构建的过程中具有不确定性,可能因为网络问题导致编译时间过长或编译失败。并且Gradle会每24小时检查一次新的依赖版本从而增加依赖解析时间。
不要使用下面的依赖方式:

// 错误的示范
implementation 'com.appadhoc:abtest:latest'
implementation 'com.android.support:appcompat-v7:27+'

  

9、对Gradle后台进程的最大堆大小的分配

分配更大的内存可能会对大的项目的构建有时间上的减少,具体还要看电脑的配置等其他因素,具体可以参考gradle官网 Configuring JVM memory:
https://docs.gradle.org/current/userguide/buildenvironment.html#sec:configuringjvm_memory
新版本配置时在gradle.properties中配置

org.gradle.jvmargs=-Xmx1536m

不要在使用老版本的在build.gradle中配置

dexOptions {
javaMaxHeapSize = '4g'
}

 

10、使用Gradle缓存

Gradle缓存是Gradle 3.5的新特性,当缓存开启时,Gradle将缓存并重用之前构建的结果。具体在gradle.properties中增加如下配置:

org.gradle.caching=true

以上几点出自google 2017 I/O大会,具体可参看会议视频 :
https://www.youtube.com/watch?v=7ll-rkLCtyk

11、针对项目构建时间具体进行优化

针对每个项目的构建呢,具体的优化也不会相同,我们可以将我们项目的具体构建时间输出成文档,具体分析哪块的构建时间过长,来针对性的优化。具体命令如下:

gradlew --profile --recompile-scripts --offline --rerun-tasks assembleFlavorDebug
  • --profile:启用分析。
  • --recompile-scripts:在绕过缓存时强制重新编译脚本。
  • --offline:禁止 Gradle 提取在线依赖项。这样可以确保 Gradle 在尝试更新依赖项时引起的任何延迟都不会干扰您的分析数据。您应当已将项目构建一次,以便确保 Gradle 已经下载和缓存您的依赖项。
  • --rerun-tasks:强制 Gradle 重新运行所有任务并忽略任何任务优化。 构建完成后,在project-root/build/reports/profile/ 目录下使用浏览器打开生成的profile-timestamp.html即可看到具体的构建时间报告。

参考文档:

andorid官方文档 —— 配置构建(https://developer.android.com/studio/build
◆ gradle官方文档 —— Building Android Apps (https://guides.gradle.org/building-android-apps
◆ Google I/O 中提到的提高Android studio的编译速度的几个建议 (https://blog.csdn.net/sd19871122/article/details/78550740

  

AndroidStudio提高编译速度的建议的更多相关文章

  1. AndroidStudio提高编译速度的几种方法

    第一种: 减少依赖库的使用,让代码更加精简.对于一些必须依赖的库要尽量使用jar包或者依赖库,这样他每次就会在本地直接加载,而不是每次翻墙检查更新 第二种: 打开Android Studio,选择菜单 ...

  2. FAQ:如何提高编译速度?

    问: 如何提高编译速度? 答: 减少一次需要编译的代码量,目前想到的有两种思路: 1:修改解决方案的属性配置,取消勾选不常修改的项目的“生成”复选框. 2:采用插件化的架构,每一个插件弄一个解决方案, ...

  3. Linux系统——提高编译速度的方法

    编译优化: 基本原则就是“以空间换时间” tmpfs: 解决IO瓶颈,充分利用本机内存资源 make -j: 充分利用本机计算资源 distcc: 利用多台计算机资源 ccache: 减少重复编译相同 ...

  4. 提高编译速度! 第一次运行需要注释掉,不然会报错,因为需要编译SO库文件 !

    // 提高编译速度! 第一次运行需要注释掉,不然会报错,因为需要编译SO库文件 ! tasks.whenTaskAdded { task -> if (task.name.contains(&q ...

  5. vs2013提高编译速度

    最近做新的项目,很多库是之前项目积累下来的库.在windows下使用的IDE是vs2013,整体编译的时候,明显感觉编译速度较慢,文件是一个一个编的. 从编译器本身的角度,vs2013是提供了加快编译 ...

  6. 通过预编译头文件来提高C++ Builder的编译速度

    C++ Builder是最快的C++编译器之一,从编译速度来说也可以说是最快的win32C++编译器了.除了速度之外,C++builder的性能也在其它C++编译器的之上,但许多Delphi程序员仍受 ...

  7. kernel编译速度提高

    1. 使用tmpfs来代替部分IO读写 2. ccache,可以将ccache的缓存文件设置在tmpfs上,但是这样的话,每次开机后,ccache的缓存文件会丢失 3.distcc,多机器编译 4.将 ...

  8. iOS进阶--提高XCode编译速度、Xcode卡顿解决方案

    提升编译链接的速度主要有以下三个方式: 1. 提高XCode编译时使用的线程数 defaults write com.apple.Xcode PBXNumberOfParallelBuildSubta ...

  9. JavaScript的工作原理:解析、抽象语法树(AST)+ 提升编译速度5个技巧

    这是专门探索 JavaScript 及其所构建的组件的系列文章的第 14 篇. 如果你错过了前面的章节,可以在这里找到它们: JavaScript 是如何工作的:引擎,运行时和调用堆栈的概述! Jav ...

随机推荐

  1. C Cow XOR 奶牛异或

    时间限制 : 10000 MS   空间限制 : 65536 KB 问题描述 农民约翰在喂奶牛的时候被另一个问题卡住了.他的所有N(1 <= N <= 100,000)个奶牛在他面前排成一 ...

  2. 三层架构之UI层

    之前已经发表了BLL,DAL,MODEL,三个层的源码 继续UI层: 先简单实现用户的登录及注册 高级操作可按照上一篇文章进行源码完善 如图所示↑ UI层目录文件 Reg.aspx 进行注册操作  & ...

  3. [转发]对ThreadPoolExecutor初识

    知识点提前预知: Java.util.concurrent.ThreadPoolExecutor类是ExecutorSerivce接口的具体实现.ThreadPoolExecutor使用线程池中的一个 ...

  4. 数据库学习 day2 检索数据

    上一节我们介绍了什么是数据库,以及一些基本的数据库术语 这一课介绍使用SELECT语句从表中检索一个或多个数据列. 关键字(Keyword) 作为SQL组成部分的保留字.关键字不能用作表和列的名字(类 ...

  5. 分治算法(C++版)

    #include<iostream>using namespace std;  void printArray(int array[],int length)  {      for (i ...

  6. 安卓开发学习日记 DAY3——TextView,EditView,ImageView

    今天学习了一些控件的使用方法,包括TextView,EditView,ImageView 1.TextView,输出一个文本呗 主要属性有 android:id 标志 android:layout_w ...

  7. Vue-CLI 3.x 部署项目至生产服务器

    本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 本教程主要讲解的是 Vue ...

  8. 微信小程序页面通信

    目录 微信小程序页面通信 方式一:通过URL 方式二:通过全局变量 方式三:通过本地存储 方式四:通过路由栈 微信小程序页面通信 方式一:通过URL // A 页面 wx.navigateTo({ u ...

  9. AJ学IOS 之小知识之_xcode插件的删除方法_自动提示图片插件KSImageNamed有时不灵_分类或宏之类不能自动提示,

    AJ分享,必须精品 一:解决解决自动提示图片插件KSImageNamed有时不灵_分类或宏之类不能自动提示 其实,插件神马的我们自己也能写,并没有想象中的那么难,不过目前我们还是先解决当前问题 在做微 ...

  10. ORA-0245

    经常有客户报错ORA-0245 1.11.2 rac环境, rman存在snap控制文件路径,默认是文件系统[非共享,导致备份控制文件报错] 解决方法:将snap路径配置到ASM磁盘组共享路径[nfs ...