@coder-pig
2017-12-15T15:44:42.000000Z
字数 2163
阅读 2347
Tutorial-Android
之所以把这节放前面,是因为刚使用Android Studio首先要面对的,
十有八九是下图:
一个菊花状的进度条,这个东西,一直在转个不停,而且转的时候巨卡,
可能N多分钟过去了,你还没能进入到项目当中。
很多人就会开始疯狂吐槽,什么垃圾编译器这类话了...
然而AS中的Gradle构建工具表示很无奈,卡顿的主要原因如下:
既然知道了问题,那么接下来从各个方面来优化Gradle构建的速度。
这个是最暴力最直接的,个人推荐标准配置如下:
CPU i5以上,内存 至少8G,硬盘 必须固态SSD
别说固态贵,没让你买500G的,120G的固态应付日常开发足矣。
附:相同配置的电脑Ubuntu系统上使用AS比Windows流畅很多,亲测~
Gradle默认会到jcenter下载项目依赖的库,国外下载速度会很慢,
或者根本没网速,如果你没代理的话,这里的话可以公司搭建本地
maven仓库,库都下到这个Maven仓库,项目在添加上这个仓库的地址,
当然配置是比较繁琐的。如果就那么几个人开发的话,没什么太大的
必要去搞,可以直接使用阿里云提供的Maven仓库,大部分比较通用
的库都能下载,在项目根目录下的build.gradle中添
加仓库地址即可:
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
SSR开启并设置PAC代理模式,打开AS的Setting,勾选输入下述内容:
不写固定版本号,每次编译的时候让他自己去检查最新版本的依赖库。
这种操作看上去高端大气,其实不然,这样做有个最大的问题:
新旧版本依赖库兼容的问题!
如果新版的API来个大更新,编译项目后一堆红色等你去处理,2333;
另外,因为每次都要检查最新的版本,然后下载,这无疑延长了gradle
的编译时长,所以不要写下面这些:
compile com.github.bumptech.glide:latest.release
compile "com.github.bumptech.glide:glide:3.+"
看上去很高明的写法,而是写成固定的版本号!!!
compile "com.github.bumptech.glide:glide:3.7.0"
如果你已经编译通过了一次,就是把所有的依赖库都下载到了本地,
那么你就可以开启离线编译模式了,但是如果某个依赖在本地不存在
的话,是会编译报错的!这个要注意!!!设置步骤如下:
直接打开Setting,勾选Offline,选择本地的.gradle文件夹
也可以通过命令行直接设置:
./gradlew --offline build
前面的话是下载库优化的,接着是gradle配置优化,打开项目根目录的
gradle.properties文件,按需添加下述配置项:
# 分配更大的内存
org.gradle.jvmargs=-Xmx3062m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# 开启守护进程
org.gradle.daemon=true
# 开启并行编译
org.gradle.parallel=true
# 开启缓存
android.enableBuildCache=true
# 开启孵化模式
org.gradle.configureondemand=true
同样,也可以为AS分配更多的内存,打开AS的安装目录下的bin目录,找到
studio64.exe.vmoptions文件,打开把两个改成更大的值:
比如改成:-Xms512m -Xmx2048m ,然后重启下AS即可。
这点不算优化,只是个人偏好的一种方式,比如你在gayhub上clone了
一个Demo,如果你直接用AS打开的话,那么你有N多分钟不用做事了,
就卡在编译界面那里,我们可以直接在命令行进行编译,进入项目
目录右键,git bash,键入下述指令进行编译:
./gradlew build
Gradle在干什么,一目了然,如果编译出错了,还能定位出错原因,
还可以加上--stacktrace,查看更加详细的错误信息。而且不会影响
你当前的AS上的项目,不会弹gradle编译那个菊花,等build success
后,再去导入,你会发现gradle两三下就跑完了~
PS:Mac或者Ubuntu直接命令行cd到项目下执行命令也行
另外,在执行./gradlew build命令的时候,出现gradlew permission的问题,
文件权限问题,直接键入:chmod +x gradle 修改下权限即可。
最近更新:2017.12.15