不断更新中…
一、插件的安装
1、alibaba java coding guidelines
2、codota
3、git安装
4、sonar
二、build运行
1、初探
随着项目变的越来越大,特别是使用了组件化之后,build需要的时间越来越久,越来越慢了。项目现在运行一次40s,一天编译很多次的情况下,无法做任何事,是多么浪费时间。
网上一般有以下几种方式解决:
1)org.gradle.daemon = true
2)org.gradle.parallel = true
3)设置gradle为offline状态
4)设置VM heap为2G
验证了下,依然很慢,事实上,Android Studio已经为我们优化了很多。
网上看到一个同学,XP系统,内存2G问能否解决,估计只能换设备了。
instant run也是可以更快些的,可以开启试试,缺陷时有时候修改了内容,并不能看到效果,依然是未修改前的状态,不知道现在Google有没有优化。
类似ButterKnife用到注解处理器,也是造成build慢的原因,由于类似注解比较好用,不可能不适用,但我们可以选择在某些module中不使用。
2、分析原因
可以分析原因,看看哪部分耗时。只需要添加 --profile :
就能创建一个profile文件,该文件位于工程下:build/reports/profile
该文件类似如下:
3、解决办法:
通过分析上图生成的profile文件,可以看出造成慢的原因如下:
- 一些长时间执行任务
- multiDexEnabled的原因
- 依赖太多
每个module都会生成一个dex。模块化虽然拖累了速度,但有效提高了编译效率,测试更容易,团队合作方便并行开发。
###1)禁用耗时运行任务
tasks.whenTaskAdded { task ->
if (task.name.startsWith(":zxing:") || task.name.startsWith(":share-lib:")) {
task.enabled = false
}
}
2)缩小项目
在Dev模式下缩小项目,可以禁用一些module,例如:
no-op项目是个空的module,我们在debug状态编译的时候引入空的module:
debugCompile(project(':share-lib-no-op')) {
}
releaseCompile(project(':share-lib')) {
}
debugCompile(project(':zxing-no-op')) {
}
releaseCompile(project(':zxing')) {
}
share-lib做实际的工作:
public class ShareProxyImpl {
public void sendShare(ShareRequestDO request, Activity activity) {
new ISShareController().startShare(activity, new ShareRequest(request));
}
public void onActivityResult(Context context, int requestCode, int resultCode, Intent data) {
ISShareController.onActivityResult(requestCode, resultCode, data);
}
}
share-lib-no-op不做任何事:
public class ShareProxyImpl {
public void sendShare(ShareRequestDO request, Activity activity) {
Toast.makeText(activity, "ShareProxyImpl:no-op:sendShare", Toast.LENGTH_SHORT).show();
}
public void onActivityResult(Context context, int requestCode, int resultCode, Intent data) {
Toast.makeText(context, "ShareProxyImpl:no-op:onActivityResult", Toast.LENGTH_SHORT).show();
}
}
用这种方式就可以减少很多的依赖,一旦项目缩小了,就不需要在debug模式下设置multiDexEnabled。
这种方式可以显著的提升编译速度,缺点就是麻烦,需要深入代码层修改。