热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

优化Gradle提升Gradle编译速度

今天小编就为大家分享一篇关于优化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就好了。

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

总结

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


推荐阅读
  • 本文介绍了如何使用Postman构建和发送HTTP请求,包括四个主要部分:方法(Method)、URL、头部(Headers)和主体(Body)。特别强调了Body部分的重要性,并详细说明了不同类型的请求体。 ... [详细]
  • 年前,我发表了一篇文章,分享了自己通过在线教育平台学习IT技能的经历。文中详细探讨了在线教育与传统线下教育在技能培训方面的优缺点。许多网友在讨论在线教育时,常常提到“在线教育是否缺乏学习氛围”的问题。本文将对此进行深入分析。 ... [详细]
  • 从零开始编译Linux系统:第16章 全新起点
    本章将详细介绍如何从零开始编译一套完整的Linux系统,涵盖关键组件如glibc库的介绍及其重要性。通过本文,读者将了解从源代码构建Linux系统的全过程。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 第七卷《英才》强调,即使有良药,若不对症,效果也不如低等药物;即使有贤才,若不适用,效果也不如普通人。文中通过多个比喻,阐述了人才使用的重要性,指出合适的人才在适当的时间和场合才能发挥最大效用。 ... [详细]
  • 本文详细介绍如何在忘记MySQL服务器密码的情况下进行密码重置,包括具体的步骤和注意事项。 ... [详细]
  • packagecom.panchan.tsmese.utils;importjava.lang.reflect.ParameterizedType;importjava.lang. ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 本文介绍了如何查看PHP网站及其源码的方法,包括环境搭建、本地测试、源码查看和在线查找等步骤。 ... [详细]
  • 蒜头君的倒水问题(矩阵快速幂优化)
    蒜头君将两杯热水分别倒入两个杯子中,每杯水的初始量分别为a毫升和b毫升。为了使水冷却,蒜头君采用了一种特殊的方式,即每次将第一杯中的x%的水倒入第二杯,同时将第二杯中的y%的水倒入第一杯。这种操作会重复进行k次,最终求出两杯水中各自的水量。 ... [详细]
  • 经过一年的思考,我发现自己对开发的兴趣并不浓厚,而对算法研究则更加热衷。本文将探讨开发与算法之间的本质差异,并分享我的未来学习计划。 ... [详细]
  • 本文介绍了Java编程语言的基础知识,包括其历史背景、主要特性以及如何安装和配置JDK。此外,还详细讲解了如何编写和运行第一个Java程序,并简要介绍了Eclipse集成开发环境的安装和使用。 ... [详细]
  • Bootstrap 缩略图展示示例
    本文将展示如何使用 Bootstrap 实现缩略图效果,并提供详细的代码示例。 ... [详细]
  • 本文介绍了一种支付平台异步风控系统的架构模型,旨在为开发类似系统的工程师提供参考。 ... [详细]
  • 使用 Git Rebase -i 合并多个提交
    在开发过程中,频繁的小改动往往会生成多个提交记录。为了保持代码仓库的整洁,我们可以使用 git rebase -i 命令将多个提交合并成一个。 ... [详细]
author-avatar
mobiledu2502937927
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有