分类: android studio2015-06-26 11:54 2374人阅读 评论(2) 收藏 举报

尊重劳动成果,转载请注明出处:http://blog.csdn.net/growth58

你是否感觉到Android Studio构建速度太慢?我也有这感觉。

幸运的是,这有很多可以提高构建速度的技巧。这些技巧目前还在实验并且有可能是不安全的,如果你觉得构建时间太长而且很痛苦的话,尝试一下这些技巧还是很有价值的。我已经按照下面所描述的试过在代码改动很少的情况下构建时间下降了2.5秒。希望对你有帮助。

Android Studio使用Gradle来构建工程。目前Gradle的版本为2.2。最近的版本为2.4,性能比之前的版本有很大的提升。

这有两种方式,一种是手动编辑构建文件,另一种是通过Android Studio改变配置。

对于手动编辑构建文件,在工程的根目录下的build.grade文件末尾添加以下代码:

  1. task wrapper(type: Wrapper) {
  2. gradleVersion = '2.4'
  3. }

打开终端并运行命令:./gradlew wrapper,它将会下载并设置版本2.4的Gradle对于你本地的Gradle wrapper.这是Gradle官方文档中所描述的方法(http://gradle.org/docs/current/userguide/gradle_wrapper.html)。

对于通过Android Studio配置,打开工程结构对话框,选择工程-〉将Gradle版本改为2.4.当你点击确定,Android Studio将自动同步Gradle的配置,并设置wrapper的新版本。

笔记:这个仅仅是当你的工程用的是Gradle wrapper(默认是用Android Studio 生成的工程)。如果不是这种情况,请参考Gradle文档 http://gradle.org.

第二步就是打开工程的构建文件中的 daemon and parallel开关。使用daemon(守护进程)将会使构建启动很快,并且它不会在应用程序每次启动的时候进行完整的构建。使用Parallel将会同时构建多个模块,在工程很大或模块很多的工程使构建速度很快。

在.gradle文件夹下添加一个文件名为gradle.properties的文件,添加如下代码(如:~/.gradle/gradle.properties)。

  1. org.gradle.daemon=true
  2. org.gradle.parallel=true

笔记:Android Studio 已经打开daemon的开关,当从终端进行构建时这个配置将确保daemon的打开。

你也可以在你的工程的根目录下添加这个文件,对于每个人构建应用它将会自动打开,包括你的集成环境(就像Jenkins CI)。当你不使用daemon构建时,从这查看更多信息http://gradle.org/docs/current/userguide/gradle_daemon.html#when_should_i_not_use_the_gradle_daemon.

关于parallel的重要的笔记:配置parallel有可能使一些工程不安全。这要求你的模块必须是解耦的(参考http://gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects)  否则有可能会构建失败。仔细测试你构建的所有variants,你会知道它的所有工作。

你可以添加其它构建参数,比如当你的工程很大时增加堆栈大小,或者指定JVM:

  1. org.gradle.jvmargs=-Xmx768m
  2. org.gradle.java.home=/path/to/jvm

对于gradle.properties文件中其它可以配置的选项,参考http://gradle.org/docs/current/userguide/userguide_single.html#sec:gradle_configuration_properties. Android Studio中一些选项是可用的,也有是默认打开的,但在gradle.properties文件中打开这些选项时,当你使用终端构建工程时,这将会确保你的同事也做了同样的配置。

最后是改变incremental dexing的值,这是一个实验的功能并且默认是关闭的。打开这个开关有可能会导致构建失败(尤其是在连续运行的时候),但我还是推荐你尝试一下,看看它是否对你有用。

在主APP模块的build.gradle文件中,添加下面的代码:

  1. dexOptions {
  2. incremental true
  3. }

希望能帮到你,如果你对提高构建执行效率有任何问题或其它技巧请在下面留言。

第一次翻译文章,水平有限还望见谅,如有曲解原文作者的意思,还望不吝指出。

原文地址:https://medium.com/@erikhellman/boosting-the-performance-for-gradle-in-your-android-projects-6d5f9e4580b6

转:Android studio Gradle的更多相关文章

  1. [转]加速Android Studio/Gradle构建

    加速Android Studio/Gradle构建 android android studio gradle   已经使用Android Studio进行开发超过一年,随着项目的增大,依赖库的增多, ...

  2. 解决Android Studio Gradle Build Running慢的问题

    Android Studio方便好用,但是Android Studio Gradle Build Running很慢 解决方法: C:\Users\你的用户名\.gradle 目录下新建一个文件名为 ...

  3. Android studio gradle 打包 那些事

    总结了一下 目前觉得比较好用的gradle 和一些打包 经验.放在这里. 首先说下 渠道号 这个概念,我们经常会统计我们的api 访问来源 是来自于那个app store,这有利于 我们针对性的推广. ...

  4. 解决Android Studio Gradle Build特别慢的问题

    解决Android Studio Gradle Build 特别慢的问题 C:\Users\你的用户名\.gradle目录下新建一个文件名为gradle.properties的文件.内容为:org.g ...

  5. android studio gradle 两种更新方法更新

    android studio gradle 两种更新方法更新 第一种.Android studio更新 第一步:在你所在项目文件夹下:你项目根目录gradlewrappergradle-wrapper ...

  6. android studio gradle 更新方法。

    Android studio更新 第一步:在你所在项目文件夹下:你项目根目录gradlewrapper gradle-wrapper.properties   (只要在打开项目的时候选OK,这个文件就 ...

  7. Android studio gradle配置完整版(转)

    Android studio gradle配置完整版https://my.oschina.net/u/1471093/blog/539075 Android studio 自定义打包apk名 - pe ...

  8. Android Studio gradle编译 NullPointerException(no error message)解决

    原文:Android Studio gradle编译 NullPointerException(no error message)解决 1.关闭Android Studio  2.找到工程目录下的 . ...

  9. [Android] Android studio gradle 插件的版本号和 gradle 的版本号 的对应关系

    [Android] Android studio gradle 插件的版本号和 gradle 的版本号 的对应关系 本博客地址: wukong1688 本文原文地址:https://www.cnblo ...

  10. android studio gradle的坑

    国产模拟器别国外的好用.非常傻瓜.有人推荐夜神. 之前用geom,下载Android都得半天.     每次做开发前,配置环境都要搞半天.尤其是想快速学习一个技术的话,光装环境都让人放弃了.最近想看一 ...

随机推荐

  1. jquery ui 改写cloes事件

    htmlAjax:{//模板ajax请求参数设置项            url:"template/task/task_create.html",            data ...

  2. Java再学习——停止一个正在运行的线程

    关于这个问题,先了解一下Thread类方法中被废弃的那些方法.suspend(), resume(),stop()/stop(Throwable obj),destroy() 首先,stop(Thro ...

  3. 小白日记46:kali渗透测试之Web渗透-SqlMap自动注入(四)-sqlmap参数详解- Enumeration,Brute force,UDF injection,File system,OS,Windows Registry,General,Miscellaneous

    sqlmap自动注入 Enumeration[数据枚举] --privileges -U username[CU 当前账号] -D dvwa -T users -C user --columns  [ ...

  4. solr 竞价排行

    在理想的情况下,搜索引擎只返回与用户查询相关的文档.而在现实的查询中,编辑(没发现更合适的表达)通常需要指定特定文档在搜索结果中的特定位置.这样做有很多原因.或许 “置顶” 的文档就是最好的查询结果. ...

  5. IOS 从系统图库中获取 图片 并设置为头像

    总会遇到一些应用 要拍照 设置图片之类的的  总结一个方法备用  以后 会 继续拓展到 多图 @interface AddCustomerViewController : UIViewControll ...

  6. 获取JDK动态代理/CGLIB代理对象代理的目标对象。

    问题描述:: 我现在遇到个棘手的问题,要通过spring托管的service类保存对象,这个类是通过反射拿到的,经过实验发现这个类只能反射取得sservice实现了接口的方法,而extends类的方法 ...

  7. js 当前日期处理 获取

    var myDate = new Date();myDate.getYear();        //获取当前年份(2位)myDate.getFullYear();    //获取完整的年份(4位,1 ...

  8. amoeba实现MySQL读写分离

    amoeba实现MySQL读写分离 准备环境:主机A和主机B作主从配置,IP地址为192.168.131.129和192.168.131.130,主机C作为中间件,也就是作为代理服务器,IP地址为19 ...

  9. Linux apache日志分析常用命令汇总

    1.查看当天有多少个IP访问: awk '{print $1}' log_file|sort|uniq|wc –l 2.查看某一个页面被访问的次数: grep "/index.php&quo ...

  10. 数理方程:Fourier级数

    更新:25 MAR 2016 对于周期函数(周期为\(2\pi\))或定义在\([-\pi,\pi]\)上的函数\(f(x)\),可以展开为* \(\large f(x)=\dfrac{a_0}{2} ...