[关闭]
@coder-pig 2017-12-15T07:44:42.000000Z 字数 2163 阅读 2186

1.4.2 Gradle编译提速

Tutorial-Android


问题描述

之所以把这节放前面,是因为刚使用Android Studio首先要面对的,
十有八九是下图:

一个菊花状的进度条,这个东西,一直在转个不停,而且转的时候巨卡,
可能N多分钟过去了,你还没能进入到项目当中。
很多人就会开始疯狂吐槽,什么垃圾编译器这类话了...

然而AS中的Gradle构建工具表示很无奈,卡顿的主要原因如下:

既然知道了问题,那么接下来从各个方面来优化Gradle构建的速度。


1.硬件优化

这个是最暴力最直接的,个人推荐标准配置如下:
CPU i5以上,内存 至少8G硬盘 必须固态SSD
别说固态贵,没让你买500G的,120G的固态应付日常开发足矣。

附:相同配置的电脑Ubuntu系统上使用AS比Windows流畅很多,亲测~


2.使用国内Maven仓库或自己搭建

Gradle默认会到jcenter下载项目依赖的库,国外下载速度会很慢,
或者根本没网速,如果你没代理的话,这里的话可以公司搭建本地
maven仓库,库都下到这个Maven仓库,项目在添加上这个仓库的地址,
当然配置是比较繁琐的。如果就那么几个人开发的话,没什么太大的
必要去搞,可以直接使用阿里云提供的Maven仓库,大部分比较通用
的库都能下载,在项目根目录下的build.gradle中添
加仓库地址即可:

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


3.使用SSR代理

SSR开启并设置PAC代理模式,打开AS的Setting,勾选输入下述内容:


4.依赖库写死版本号

不写固定版本号,每次编译的时候让他自己去检查最新版本的依赖库。
这种操作看上去高端大气,其实不然,这样做有个最大的问题:

新旧版本依赖库兼容的问题

如果新版的API来个大更新,编译项目后一堆红色等你去处理,2333;
另外,因为每次都要检查最新的版本,然后下载,这无疑延长了gradle
的编译时长,所以不要写下面这些:

  1. compile com.github.bumptech.glide:latest.release
  2. compile "com.github.bumptech.glide:glide:3.+"

看上去很高明的写法,而是写成固定的版本号!!!

  1. compile "com.github.bumptech.glide:glide:3.7.0"

5.开启Gradle离线编译模式

如果你已经编译通过了一次,就是把所有的依赖库都下载到了本地
那么你就可以开启离线编译模式了,但是如果某个依赖在本地不存在
的话,是会编译报错的!这个要注意!!!设置步骤如下:

直接打开Setting勾选Offline选择本地的.gradle文件夹

也可以通过命令行直接设置:

  1. ./gradlew --offline build

6.调整gradle.properties中的各种配置

前面的话是下载库优化的,接着是gradle配置优化,打开项目根目录的
gradle.properties文件,按需添加下述配置项:

  1. # 分配更大的内存
  2. org.gradle.jvmargs=-Xmx3062m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
  3. # 开启守护进程
  4. org.gradle.daemon=true
  5. # 开启并行编译
  6. org.gradle.parallel=true
  7. # 开启缓存
  8. android.enableBuildCache=true
  9. # 开启孵化模式
  10. org.gradle.configureondemand=true

7.Android Studio配置优化

同样,也可以为AS分配更多的内存,打开AS的安装目录下的bin目录,找到
studio64.exe.vmoptions文件,打开把两个改成更大的值:

比如改成:-Xms512m -Xmx2048m ,然后重启下AS即可。


8.直接在命令行编译

这点不算优化,只是个人偏好的一种方式,比如你在gayhub上clone了
一个Demo,如果你直接用AS打开的话,那么你有N多分钟不用做事了,
就卡在编译界面那里,我们可以直接在命令行进行编译,进入项目
目录右键,git bash,键入下述指令进行编译:

  1. ./gradlew build

Gradle在干什么,一目了然,如果编译出错了,还能定位出错原因,
还可以加上--stacktrace,查看更加详细的错误信息。而且不会影响
你当前的AS上的项目,不会弹gradle编译那个菊花,等build success
后,再去导入,你会发现gradle两三下就跑完了~

PS:Mac或者Ubuntu直接命令行cd到项目下执行命令也行
另外,在执行./gradlew build命令的时候,出现gradlew permission的问题,
文件权限问题,直接键入:chmod +x gradle 修改下权限即可。


最近更新:2017.12.15

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注