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

相关文章

ESP32 esp-idf esp-adf环境安装及.a库创建与编译

简介 ESP32 功能丰富的 Wi-Fi & 蓝牙 MCU, 适用于多样的物联网应用。使用freertos操作系统。 ESP-IDF 官方物联网开发框架。 ESP-ADF 官方音频开发框架。 文档参照 https://espressif-docs.readthedocs-hosted.com/projects/esp-adf/zh-cn/latest/get-started/index

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

UnrealScriptIDE调试环境部署

先安装vs2010   再安装VSIsoShell.exe, 下载地址 https://pan.baidu.com/s/10kPNUuDGTbWXbz7Nos-1WA       fd3t   最后安装unside,下载地址 https://archive.codeplex.com/?p=uside  安装中间有一步选择Binary文件夹要选对路径。   安装好以后,启动 UDKDe

Eclipse+ADT与Android Studio开发的区别

下文的EA指Eclipse+ADT,AS就是指Android Studio。 就编写界面布局来说AS可以边开发边预览(所见即所得,以及多个屏幕预览),这个优势比较大。AS运行时占的内存比EA的要小。AS创建项目时要创建gradle项目框架,so,创建项目时AS比较慢。android studio基于gradle构建项目,你无法同时集中管理和维护多个项目的源码,而eclipse ADT可以同时打开

android 免费短信验证功能

没有太复杂的使用的话,功能实现比较简单粗暴。 在www.mob.com网站中可以申请使用免费短信验证功能。 步骤: 1.注册登录。 2.选择“短信验证码SDK” 3.下载对应的sdk包,我这是选studio的。 4.从头像那进入后台并创建短信验证应用,获取到key跟secret 5.根据技术文档操作(initSDK方法写在setContentView上面) 6.关键:在有用到的Mo

android一键分享功能部分实现

为什么叫做部分实现呢,其实是我只实现一部分的分享。如新浪微博,那还有没去实现的是微信分享。还有一部分奇怪的问题:我QQ分享跟QQ空间的分享功能,我都没配置key那些都是原本集成就有的key也可以实现分享,谁清楚的麻烦详解下。 实现分享功能我们可以去www.mob.com这个网站集成。免费的,而且还有短信验证功能。等这分享研究完后就研究下短信验证功能。 开始实现步骤(新浪分享,以下是本人自己实现

Android我的二维码扫描功能发展史(完整)

最近在研究下二维码扫描功能,跟据从网上查阅的资料到自己勉强已实现扫描功能来一一介绍我的二维码扫描功能实现的发展历程: 首页通过网络搜索发现做android二维码扫描功能看去都是基于google的ZXing项目开发。 2、搜索怎么使用ZXing实现自己的二维码扫描:从网上下载ZXing-2.2.zip以及core-2.2-source.jar文件,分别解压两个文件。然后把.jar解压出来的整个c

android 带与不带logo的二维码生成

该代码基于ZXing项目,这个网上能下载得到。 定义的控件以及属性: public static final int SCAN_CODE = 1;private ImageView iv;private EditText et;private Button qr_btn,add_logo;private Bitmap logo,bitmap,bmp; //logo图标private st

Android多线程下载见解

通过for循环开启N个线程,这是多线程,但每次循环都new一个线程肯定很耗内存的。那可以改用线程池来。 就以我个人对多线程下载的理解是开启一个线程后: 1.通过HttpUrlConnection对象获取要下载文件的总长度 2.通过RandomAccessFile流对象在本地创建一个跟远程文件长度一样大小的空文件。 3.通过文件总长度/线程个数=得到每个线程大概要下载的量(线程块大小)。

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa