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

 更新时间:2017年11月16日 14:13:49   投稿:laozhang  
本文主要介绍了使用Android Studio3.0新功能,加快Android Studio的构建速度等相关做法。

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

相关文章

  • 利用Jetpack Compose复刻游戏Flappy Bird

    利用Jetpack Compose复刻游戏Flappy Bird

    Flappy Bird是13年红极一时的小游戏,其简单有趣的玩法和变态的难度形成了强烈反差,引发全球玩家竞相把玩!本文将通过Jetpack Compose复刻这一游戏,感兴趣的小伙伴可以了解一下
    2022-02-02
  • Android  AIDL——进程通信机制详解

    Android AIDL——进程通信机制详解

    这篇文章主要介绍了Android AIDL——进程通信机制详解的相关资料,并附简单实例,和实现效果图,需要的朋友可以参考下
    2016-10-10
  • Android开发之splash界面下详解及实例

    Android开发之splash界面下详解及实例

    这篇文章主要介绍了 Android开发之splash界面下详解及实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • Android开发之permission动态权限获取详解

    Android开发之permission动态权限获取详解

    这篇文章主要为大家详细介绍了Android开发之permission动态权限获取,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 基于Fedora14下自带jdk1.6版本 安装jdk1.7不识别的解决方法

    基于Fedora14下自带jdk1.6版本 安装jdk1.7不识别的解决方法

    本篇文章是对Fedora14下自带jdk1.6版本,安装jdk1.7不识别的解决方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Android实现NFC读取校园卡

    Android实现NFC读取校园卡

    这篇文章主要为大家详细介绍了Android实现NFC读取校园卡,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • android项目实现带进度条的系统通知栏消息

    android项目实现带进度条的系统通知栏消息

    本篇文章主要介绍了android项目实现带进度条的系统通知栏消息,就是实现在通知栏看到下载进度。具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-10-10
  • Android开发实现的导出数据库到Excel表格功能【附源码下载】

    Android开发实现的导出数据库到Excel表格功能【附源码下载】

    这篇文章主要介绍了Android开发实现的导出数据库到Excel表格功能,涉及Android数据库及Excel表格相关操作技巧,并附带完整源码供读者下载参考,需要的朋友可以参考下
    2018-03-03
  • Android编程中HTTP服务用法详解

    Android编程中HTTP服务用法详解

    这篇文章主要介绍了Android编程中HTTP服务用法,结合实例形式较为详细的分析了Android中http服务的具体步骤与相关使用技巧,需要的朋友可以参考下
    2016-01-01
  • Android ProductFlavor的使用详解

    Android ProductFlavor的使用详解

    如果你的项目需要要区分国内版和国外版甚至还要根据用户是否是VIP会员加上收费和免费的版本,我们可以使用ProductFlavor对UI布局和icon图标进行版本区分,有此类需求的朋友,不妨了解下本文
    2021-06-06

最新评论