用Android Studio3.0新功能加快构建速度

所属分类: 软件编程 / Android 阅读数: 36
收藏 0 赞 0 分享

Android Studio3.0很多新的功能,他们可以直接加快Android Studio的构建速度从而加快开发效率,构建速度直接影响到开发效率,浪费时间即浪费生命,可以通过修改一些配置,优化下构建速度。

Android Studio3.0之前的做法

通过配置DEX 资源缩短构建时间

gradle 添加以下代码

android {
 ...
 dexOptions {
  maxProcessCount 4 // this is the default value
  javaMaxHeapSize "2g"
 }
}

maxProcessCount

设置可以并行启动的 DEX 进程的最大数量

javaMaxHeapSize 设置 dex 操作的最大内存分配池大小
根据自己电脑的配置,设置这两个值,通常情况下这两个值越大越好

启用 dexing-in-process 和增量 Java 编译

Android Plugin for Gradle 版本 2.1.0 及更高版本还引入了其他的构建流程改进,包括增量 Java 编译和 dexing-in-process。增量 Java 编译默认情况下处于启用状态,这种编译方式仅对发生变化或需要重新编译的源代码部分进行重新编译,可以缩短开发过程中的编译时间。

dexing-in-process 在构建流程而不是单独的外部 VM 流程中执行 dexing。这样不仅可以让增量构建更快,也可以显著提高完整构建的速度。要启用此功能,您需要将 Gradle 后台进程的最大堆大小设置为至少 2048 MB。要进行设置,您可以将以下代码包含到项目的 gradle.properties 文件中

org.gradle.jvmargs = -Xmx2048m

如果您已经在模块级别的 build.gradle 文件中为 javaMaxHeapSize 定义值,则需要将后台进程的最大堆大小设置为 javaMaxHeapSize 的值 + 1024 MB。例如,如果您已将 javaMaxHeapSize 设为“2g”,则需要将以下代码添加到项目的 gradle.properties 文件中:

org.gradle.jvmargs = -Xmx3072m

3.0之后的做法

使用用D8 编译器作为DEX 编译器

Android Studio3.0 包含了一个新的可选择DEX编译器,叫做D8,不久它将替换掉旧的DX编译器,现在可以选择使用新的编译器,DEX编译直接影响到app的构建时间,dex文件大小,和运行时的性能,当使用新的D8编译器,D8编译更快和输出更小的.dex文件,并且相同或者更好的app运行时性能。要想使用D8编译器,把以下代码添加到工程的gradle.properties 文件即可

android.enableD8=true

使用新的依赖方式

也就是指dependencies代码块的引用

dependencies{
  compile project('xxx')
  compile 'com.github.bumptech.glide:glide:3.7.0'
}

Android gradle 3.0 插件有4种引入方式
* implementation 相当于原来的compile
* api 相当于原来的compile
* compileOnly 相当于原来的provided
* runtimeOnly 相当于原来的apk

一般来说实际中主要用到的是compile
为了提高构建速度
替换成

implementation project('xxx')
implementation 'com.github.bumptech.glide:glide:3.7.0'
api project('xxx')
api 'com.github.bumptech.glide:glide:3.7.0'

那这两者有什么区别呢

此时需要注意的一个地方,例如一个叫A的lib里面用implementation引用一个B库,又有一个C的module(不管是lib还是app)引用了A,这个C的module是引用了不了B的,也就是不能使用B库里面的类和方法。这也是为什么使用implemention会加快构建速度的原因,可以减少重复编译。要想引用B到的库,可以使用api。在3.0中,api用法可以完全可以替换之前的compile,不用担心编译问题。

简单总结下:

implementation:C引用A,即使A库implementation方式引用B,C也不会引用B

api :C引用A,并且A库用api方式引用B,C会引用B

compileOnly 只依赖库用来编译,不会把库打包进apk,在一些特定的场景很有用

runtimeOnly 不用来编译,但是会打包到apk,这个方式是deprecated(不推荐使用)的

参考

配置构建

Migrate to Android Plugin for Gradle 3.0.0

更多精彩内容其他人还在看

Android中加入名片扫描功能实例代码

这篇文章主要介绍了Android中加入名片扫描功能实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿微信发表说说实现拍照、多图上传功能

这篇文章主要为大家详细介绍了Android仿微信发表说说实现拍照、多图上传功能,使用Retrofit2.0技术,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

设置Android系统永不锁屏永不休眠的方法

在进行Android系统开发的时候,有些特定的情况需要设置系统永不锁屏,永不休眠。本篇文章给大家介绍Android 永不锁屏,开机不锁屏,删除设置中休眠时间选项,需要的朋友一起学习吧
收藏 0 赞 0 分享

Android Retrofit 2.0框架上传图片解决方案

这篇文章主要介绍了Android Retrofit 2.0框架上传一张与多张图片解决方案,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android自定义等待对话框

这篇文章主要为大家详细介绍了Android自定义等待对话框的实现方法,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android中Window添加View的底层原理

这篇文章主要介绍了Android中Window添加View的底层原理,需要的朋友可以参考下
收藏 0 赞 0 分享

Android调用系统默认浏览器访问的方法

这篇文章主要介绍了Android调用系统默认浏览器访问的方法的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发退出程序的方法汇总

Android程序有很多Activity,比如说主窗口A,调用了子窗口B,子窗口B又调用子窗口C,back返回子窗口B后,在B中如何关闭整个Android应用程序呢? 下面脚本之家小编就给大家介绍android开发退出程序的几种方法,感兴趣的朋友参考下吧
收藏 0 赞 0 分享

Android程序开发中单选按钮(RadioGroup)的使用详解

在android程序开发中,无论是单选按钮还是多选按钮都非常的常见,接下来通过本文给大家介绍Android程序开发中单选按钮(RadioGroup)的使用,需要的朋友参考下吧
收藏 0 赞 0 分享

Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中

这篇文章主要介绍了Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中 的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多