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

相关文章

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级