Android Gradle 构建环境

2024-06-21 15:32
文章标签 android 构建 环境 gradle

本文主要是介绍Android Gradle 构建环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:

Chapter 12. The Build Environment:https://docs.gradle.org/current/userguide/build_environment.html


百度百科:gradle

GradleAndroid Studio 默认的项目自动化构建工具。当工程越来越大时,需要编译的时间也越来越长,对其进行进一步的设置能够帮助加速编译


主要内容

  1. gradle.properties 浅析
  2. build_environment.html 浅析
  3. 通过代理(proxy)访问 web
  4. 什么是解耦工程(decoupled project
  5. 小小总结
  6. 链接

gradle.properties 浅析

gradle.properties 位于工程目录下,是项目级别的 Gradle 设置(Project-wide Gradle settings

# Project-wide Gradle settings.# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true

它主要讲了 4 点内容

  • 对于 Android Studio 用户而言,通过 IDE 设置的 Gradle 配置将会重载这里的配置,即 IDE 配置级别高于 gradle.properties 文件配置
  • 更多的关于如何配置构建环境(build environment),参考网址 http://www.gradle.org/docs/current/userguide/build_environment.html
  • 指定用于守护进程(daemon process)的 JVM 参数,该设置特别有助于调整内存设定,然后在下面列出一个设置:

    `org.gradle.jvmargs=-Xmx1536m`
    
  • 如果配置下面选项,Gradle 将以平行模式(incubating parallel mode)运行:

    org.gradle.parallel=true
    

    并特别说明此选项仅适用于解耦工程(decoupled projects),参数网址 http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects


build_environment.html 浅析

在上一小节中,关于构建环境给出了参考网址 build_environment.html,下面就进入该网址看看有哪些可以帮助进行配置

参考:Gradle User Guide

该网址是 Gradle 用户指南(Gradle User Guide)第 12 章 - The Build Environment

主要内容有 3 点:

  • 通过 gradle.properties 配置构建环境
  • Gradle 属性和系统属性
  • 通过代理(proxy)访问 web

通过 gradle.properties 配置构建环境

参考:Environment variables

Gradle 配置可通过 gradle.properties 文件进行,将该文件版本化有助于整个开发组在同一个开发环境下工作

可在多个环境下配置 gradle.properties 文件(就是说在多个位置下放置 gradle.properties 文件均有效),其按如下顺序执行(当某个 Gradle 选项被多个位置的 gradle.properties 文件设置时,按下面顺序的最后一个生效):

  • 来自于项目目录下的 gradle.properties 文件(in project build dir
  • 来自于 gradle user home 目录下的 gradle properties 文件(in gradle user home
  • 来自于系统属性。比如,when -Dsome.property is set on the command line

Note:GRADLE_USER_HOME 默认指 USER_HOME/.gradle,我在 Windows 环境下就是 C:\Users\zj\.gradle

下面介绍几个自认为有用的属性:

  1. org.gradle.daemon:当设为 true 时, Gradle 守护进程被用于运行构建项目。对于 local developer builds 而言这是最好的属性(看起来文档推荐使用这个
  2. org.gradle.java.home:指定 Java 路径。可以设为 jdk 路径或者 jre 路径,不过使用 jdk 路径更安全。未进行设定时会使用默认设置
  3. org.gradle.jvmargs:指定用于守护进程的 jvmargs 参数,该参数对于调整内存设置特别有用。如果内存足够大的话,可以多分配一些内存用于构建,上一小节中 gradle.properties 默认设为:

    `org.gradle.jvmargs=-Xmx1536m`
    

    还可设置为:

    org.gradle.jvmargs=-Xmx2048m
    

    我将其设置为:

    org.gradle.jvmargs=-Xmx4096m
    
  4. org.gradle.configureondemand:在多项目工程中能够加速编译

    Enables new incubating mode that makes Gradle selective when configuring projects.
    Only relevant projects are configured which results in faster builds for large multi-projects
    
  5. org.gradle.parallel:配置此选项,Gradle 将以并行模式运行(in incubating parallel mode)。看起来运行时间会更短,不过 gradle.properties 文件中指明该选项仅适用于解耦工程(decoupled projects

Forked Java processes

本小节简单讲解了一下推荐使用 Gradle 守护进程的原因,就是上面讲到的许多设置(比如 Java 版本,最大的堆大小)仅当一个新的 JVM 被启动时才被指定,这意味着当存在不同的 gradle.properties 文件(这里不清楚是说上面提到的不同的地方的 gradle.properties 文件还是不同工程的 gradle.properties文件),必须启动一个新的 JVM 进程,而如果运行在守护进程中,JVM 仅需启动一次即可(这里用到了 with correct parameters,不理解什么是 correct paramters),详细原因可参考 Chapter 7. The Gradle Daemon

Gradle 属性和系统属性

文中提到 Gradle 提供了多种方法来为工程构建增加属性,比如-D / -P 命令行选项等等

个人感觉比较有用的一项是通过属性文件(properties file)来增加属性。就是将 gradle.properties 文件放置在 Gradle user home 目录下(defined by the “GRADLE_USER_HOME” environment variable, which if not set defaults to USER_HOME/.gradle),或者你的项目目录下。其中,对于多项目工程,可将其放置在所有子项目目录下。并且上一小节提到了,在 Gradle user home 目录下的 gradle.properties 文件的优先级高于项目目录下。


通过代理(proxy)访问 web

可以通过 gradle.properties 文件配置 HTTP 或者 HTTPs 代理,此文件可放置在项目目录下或者 Gradle home 目录下

它给了两个示例:

  • HTTP 代理:

    systemProp.http.proxyHost=www.somehost.org
    systemProp.http.proxyPort=8080
    systemProp.http.proxyUser=userid
    systemProp.http.proxyPassword=password
    systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost
    
  • HTTPs 代理:

    systemProp.https.proxyHost=www.somehost.org
    systemProp.https.proxyPort=8080
    systemProp.https.proxyUser=userid
    systemProp.https.proxyPassword=password
    systemProp.https.nonProxyHosts=*.nonproxyrepos.com|localhost
    

其实还是没太理解为什么要设置代理,在网上也找了一些文章,大概就说 Gradle 每次构建都要联网(外网),设置代理能够防止出现 Gradle Sync Failed 现象,但是我好像没有这个问题(当然已经连了外网了,只是没设代理)

另外,同样可以在 IDE 上进行设置,点击菜单栏 File -> Settings -> Appearance & Behavior -> System Settings > HTTP Proxy

Note:在一个组内共同开发时,有时别人设置了代理,可能会导致项目无法编译,可以注释掉试一下


什么是解耦工程(decoupled project

参考:

decoupled_projects

优化gradle编译速度实践

Two projects are said to be decoupled if they do not directly access each other's project model. 
Decoupled projects may only interact in terms of declared dependencies:project dependencies (Section 25.4.3, “Project dependencies”) and/or task dependencies (Section 16.5, “Task dependencies”)

解耦应该是指两个工程之间至多仅存在项目依赖或者 task 依赖


小小总结

按照上面的说法,现在进行一个小小的总结,可以在 Gralde home 目录下放置一个 gradle.properties 文件,修改如下:

# Project-wide Gradle settings.# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# org.gradle.jvmargs=-Xmx1536m# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx4096m
org.gradle.configureondemand=true
org.gradle.parallel=true

链接

看到一篇不错的博文,收藏一下:

Android Studio Gradle优化方法(一般人我不告诉他)

这篇关于Android Gradle 构建环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081603

相关文章

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配