优化Gradle提升Gradle编译速度

一. 我们先说一下提升Gralde编译速度. 针对这个问题, 先讲一下配置相关设置提升编译速度. 

  • 我发现在build.gradle文件中如果设置了很多渠道, 在编译时会影响编译速度, 尤其是windows系统下运行。
  • 对gradle中渠道进行优化, 可以提升编译速度

1. 在user/.gradle文件下创建gradle.properties文件, 并在中写上org.gradle.daemon=true , 保存.

2. 设置studio, 打开setting >> gradle>> 勾选offine work; 打开离线编译;如下图:

3.设置JAVa虚拟机的运行内存等

在项目的根目录中找到gradle.properties文件, 位置如下图, 并设置相关参数, 这一项设置在网上很多人提到, 我就不多说了。

但是有一点值得注意的是, 不能将java最大的运行内存设置过高, 否则会引起第二次启动时启动不了, 会报内存不足。

4. 硬件提升

这个根据自己的情况而定。 如果可能的话, 建议使用台试机, 扩展性强。

我给大家推荐一下配置吧:

4.1 使用双路主板,配置两颗CPU,  可以使用工作站的, 也可以用服务器的, 建议考虑工作站的。 现在市场上有超微的, 华硕, 技嘉等等都双路工作站主板

4.2 使用NVME 固态硬盘。 例如三星p961, 可以通过PCI-E转nvme 转接卡, 将硬盘安装到主板的PCI-E插槽上, 峰值速度达到2000M/s,这可不是一般的sata固态硬盘所能达到的速度。

注意:这种硬盘并不支持win7系统, 需要win8.1 win10系统才能识别。

4.3 选用多条内存。 上面推荐使用了双路主板, 最新该类型主板支持ddr4内存, 且共有八通道,使用4*8 = 32 G配置,可以将内存性能发挥至极至。

5.  优化gradle中的渠道配置

这是我所讲的重点, 如果对您有帮助,请注意看

在build.gradle 检查渠道数量, 如下图:

备注:在网上有很多贴子写到变种productFlavors,让buildtype与productFlavors结合使用, 达到不同版本不同渠道配置不同的参数, 依赖的libs也进行相关设置的编译。 例如app依赖了Alibs, 并且需要Alibs能够识别buildtype, 在app选择测试版时, Alibs也编译了它的debug中参数。。

通过多次实践发现, 这种变种flavors, 会导致编译速度变慢, 尤其是渠道较多时,这种

渠道名BuildTypeCompile project(path:':libs名字',configuration:'渠道名BuildType')

  • 例: huaweiDebugCompile project(path: ':banner', configuration: 'huaweiDebugCompile')

这种会使编译速度更慢。 所以不推荐这种实现方式, 如果遇到这种需求,请尝试其它方法解决。

言归正转 优化Gradle 

  • 条件:在有较多渠道时, 进行渠道优化。
  • 目的:提升gradle编译速度
  • 思路: 由于我们在打多渠道包时, 只有在发版时才会打,平时测试时我们并不需要打多个渠道的包,只会生成测试版, 线上版,预发布版本等等。 所以我们可以在gralde中设置一个boolean型全局常量,通过该常量判断我们是否需要打渠道包。 在测试时 , 我们可以只设置一个渠道, 在上线打包时, 将所有渠道开放。 这样, 在我们平时写程序时, 就可以提升编译速度, 在打渠道时, 就让它静静地打包。

步骤一: 设置全局变量

方法一:可以设置项目的全局变量。 在项目根目录下的build.gralde中的

allprojects下添加ext{...}

我添加了三个常量, 因为我的版本需要打三个不同名字的应用。如果您的项目中没有该需求,只需设置一个就行了

ext {
 isHtgPack = false
 isOasPack = false
 isGeniusPack = false
}

方法二: 在渠道所在build.gradle中配置常量。 添加ext{...}

注意:

1.根据gradle语法, 常量需要在调用前声明。
 2.设置常量时不能用def boolean 等修饰 ;它会自动识别它的数据类型;

步骤二: 代码设置渠道

gradle是基于java, 所以它的很多语法和java一致,对写android的哥们更易上手

在android {}中设置渠道, 添加 一行代码。将渠道

if(isHtgPack) {
//打包时需的渠道(所有渠道)
。。
productFlavors {
huawei {}
360 {}
...
}
}else {
//只配置一个渠道
productFlavors{
 textFlavors{}
}
}

在需要打包时将常量的值更改一下就好了,将false更改为true就好了。

这样就巧秒地避开了需要编译很多渠道了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • 关于gradle你应该知道的一些小事

    前言 gradle的定义(来自维基百科) Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具.它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML.当前其支持的语言限于Java.Groovy和Scala,计划未来将支持更多的语言. 通俗的理解:gradle是一种构建工具,我们可以用他来对多工程进行各种管理(依赖,打包,部署,发布,各种渠道的差异管理): 有些时候,我们会有一些个性化的构建需求,比如我们引入了第三方库,或者我们想要在通

  • spring boot使用sonarqube来检查技术债务

    作为代码质量检查的流行工具,比如Sonarqube能够检查代码的"七宗罪",跟代码结合起来能够更好地提高代码的质量,让我们来看一下,刚刚写的Springboot2的HelloWorld的代码有什么"罪". Sonarqube Sonarqube可以使用docker版本快速搭建,可以参看一下Easypack整理的镜像,具体使用可以参看如下链接,这里不再赘述: https://hub.docker.com/r/liumiaocn/sonarqube/ 环境假定 本文使用

  • Gradle进阶使用结合Sonarqube进行代码审查的方法

    作为代码质量检查的流行工具,比如Sonarqube能够检查代码的"七宗罪",跟代码结合起来能够更好地提高代码的质量,这篇文章将会介绍如何结合gradle和sonarqube对代码质量与测试覆盖率进行分析. Sonarqube Sonarqube可以使用docker版本快速搭建,可以参看一下Easypack整理的镜像,具体使用可以参看如下链接,这里不再赘述: https://hub.docker.com/r/liumiaocn/sonarqube/ 环境假定 本文使用到的sonarqub

  • Android中的build.gradle文件深入讲解

    一.什么是Gradle gradle是一个项目构建工具,java开发中有两个大名鼎鼎的项目构建Maven,Ant,其中maven简单易控深受开发者喜爱. 项目构建工具是什么?能干吗? 开发某些项目时,需要很多jar或者库的支持,还没开始开发就下载了n多个库,浪费了时间不说,这些库之间兼容性又无法保证.删了?白下载了.不删?又不兼容.此时就需要使用项目构建工具,简单的说就是一个可以根据简单的配置文件自动去下载相应包/库的软件.自动的还很简单,不用岂不亏了.多个项目构建工具各有特点,但是核心思想一样

  • 给Android初学者的Gradle知识普及

    Gradle build android 历史 Android Tools 主页 ,大概是2016年2月份发布 adt21.1 的时候,忽然在主页发现了New Build System 原来是可以用gradle 来构建android项目,至于gradle是什么(既然点击进来看了应该都知道了吧.).然后,又看了一下RoadMap 那时候,还并不支持Proguard 打包,于是就没看了. android studio 发布,终于gradle 0.4 也跟着出来了,于是,先把gradle 学了一遍,然

  • Android Studio Gradle插件版本与Gradle版本之间的对应关系

    1.gradle插件版本配置位置: project对应的build.gradle文件中 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.2.3' } } 2.gradle版本配置位置: gradle-wrapper.properties 中 distributionUrl=https\://services.gradle.org/distribu

  • Spring Boot配置Thymeleaf(gradle)的简单使用

    最近项目用到了Spring Boot ,但是在控制器返回html视图并渲染参数的时候,存在了疑问.后面考虑用Thymeleaf ,感觉真的不错,下面分享给大家 总共四步: jar 引入 控制器参数传递 html标签引入 Thymeleaf 缓存设置 一.相关Jar的引用 1.maven的引用方式: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-

  • Android gradle插件打印时间戳的方法详解

    Android中时间戳的详细解释: (1).定义: 时间戳就是根据当前系统时间生成的一组随机数字. (2).作用: 作为对数据唯一性的一种判断依据.避免了重复修改数据所带来的错误! (3).应用: (1).在银行account表中建立时间戳字段timestamp,设定为文本类型varchar. (2).当银行A读取account表中的存款字段时,同时也读取时间戳字段,比如123456. (3).当银行A修改完存款数值后,进行存盘操作时,将先前读取的时间戳123456与当时表中的时间戳进行一次对比

  • 使用Sonarqube扫描Javascript代码的示例

    使用sonarqube对javascript代码进行扫描,分析代码质量,最简单的方式莫过于使用缺省的sonar-way中的javascript的规则,使用sonar-scanner进行扫描,这篇文章通过最简单的例子,来进行说明. 事前准备 Sonarqube Sonarqube可以使用docker版本快速搭建,可以参看一下Easypack整理的镜像,具体使用可以参看如下链接,这里不再赘述: https://hub.docker.com/r/liumiaocn/sonarqube/ 环境假定 本文

  • Spring Boot使用Thymeleaf + Gradle构建war到Tomcat

    Spring Boot 以Jar的方式部署启动,这个不用介绍了, 之前也介绍了关于 Spring Boot + thymeleaf 的简单使用 ,但是今天遇到一个问题, 我先描述下问题的场景: 由于运维部门的需求,项目需要以war的形式放到tomcat运行 ,而不是原定的jar的方式运行 配置了一下午,也查了一下午的资料,以war的方式在Tomcat能运行,并且能访问Controller,但是在返回html视图时,找不到视图模板.最终发现问题在Thymeleaf的配置,话不多说,具体看操作步骤:

随机推荐