Gradle 配置详解

Gradle 配置详解Gradle 配置详解我们为大家介绍一下 Android 项目中 Gradle 的配置 1 AndroidStudi 项目结构我们介绍 AndroidStudi 中 Android 项目的 Gradle 配置之前 我们先来看下 AndroidStudi 中 Android 项目的结构 我们新建一个项目结构大致如下图所示 我们通过上面的图片可以看到 Android 项目中跟 Gradle 相关的主要有 7 个部分 根目录下的 build gradle 顶级构建文件 配置 Gr

Gradle 配置详解

我们为大家介绍一下 Android 项目中 Gradle 的配置。

1. AndroidStudio 项目结构

我们介绍 AndroidStudio 中 Android 项目的 Gradle 配置之前,我们先来看下 AndroidStudio 中 Android 项目的结构,我们新建一个项目结构大致如下图所示:

Gradle 配置详解

我们通过上面的图片可以看到,Android 项目中跟 Gradle 相关的主要有 7 个部分:

  1. 根目录下的 build.gradle: 顶级构建文件,配置 Gradle 版本和 Maven 依赖;
  2. app 目录下的 build.gralde文件: app 打包和签名配置,及模块的依赖;
  3. gradle 文件夹: 配置 gradel-wrapper;
  4. setting.gradle 文件: 添加编译的所有模块;
  5. gradle.projects 文件: 项目范围的梯度设置,编译内存,Gradle 并发性等设置。
  6. gradlew 和 gradlew.bat 文件: Gradle 启动脚本文件
  7. .gradle 文件夹: 编译时的缓存文件夹

这几个部分各自负责的功能都不尽相同。下面我们来看下它们具体的功能

2. 根目录下的 build.gradle 文件

这个文件是我们创建 Android 项目的时候自动生成的,它是顶级构建文件,我们可以在其中添加所有子项目/模块共有的配置选项。我们来看下这个文件:

// Top-level build file where you can add configuration options common to all sub-projects/modules. //顶级构建文件,您可以在其中添加所有 子项目/modules 共有的配置选项 buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.5.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files //注意:不要将您的应用程序依赖项放在这里; 它们属于单独的模块 build.gradle 文件 } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } 

以上就是我们每创建一个 Android 项目,项目根目录下的 build.gradle 文件的代码,也就是顶级构建文件的代码。下面来分开讲解一下每个闭包:

2.1 buildscript{} 闭包

首先我们先看下上面的buildscript闭包,这个闭包里是配置 Gradle 脚本执行所需要的的依赖,分别是对应 Maven 仓库和构建工具 Gradle 的版本。

2.1.1 repositories{} 闭包

这个闭包里面主要是配置远程的 Maven 仓库地址。我们看到里面声明了jcenter()google(),这两个都是 maven 仓库,上面托管了很多开源项目,依赖了这个我们就可以引用上面的开源项目了。比如 Android 中的 V7,V4 包等。

2.1.2 dependencies{} 闭包

这个闭包我们直接看,就应该能猜到是配置项目构建工具 Gradle 的版本的,classpath 就是声明一个插件 Gradle来构建项目。dependencies虽然是依赖的意思,但是我们这里需要注意:不能将应用程序的依赖放在这里,应用程序的依赖在单独的build.gradle里面。

2.2 allprojects{} 闭包

这个闭包里面的是我们项目运行所需要的的依赖,往往和上面的repositories是相对应的。

buildscript { repositories { //注释1 maven { url "http://maven.aliyun.com/nexus/content/groups/public/" } google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.5.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files //注意:不要将您的应用程序依赖项放在这里; 它们属于单独的模块build.gradle文件 } } allprojects { repositories { //注释2 maven { url "http://maven.aliyun.com/nexus/content/groups/public/" } google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } 

这里我们需要注意代码中的注释1注释2处的 repositories 闭包,往往我们添加一个 maven 库的依赖时,需要两个闭包中都添加一遍。

Tips: 我们添加 Maven 库时可以需要两个都添加,比如国外 Maven 访问太慢,我们可以加入国内阿里云的 Maven 库。

2.3 clean任务

我们前面讲到 Gradle 是基于任务的,这里的clean它是一个 Gradle 任务,它继承自Delete,我们点击clean Project或是执行gradle clean命令的时候就是在执行这个任务,它的任务内容是删除build文件夹下的内容。

3. app目录下的 build.gradle 文件

这个我们直接看文件内容吧:

//注释1 apply plugin: 'com.android.application' //注释2 android { compileSdkVersion 28 buildToolsVersion "29.0.2" defaultConfig { applicationId "com.bthvi.myuiapplication" minSdkVersion 19 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } //注释3 dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' } 

上面的文件就是 app 模块下的 build.gradle 文件,我们看到主要是分三个部分,注释1,注释2,注释3分别对应如下三个语句和闭包:

  1. apply plugin 语句
  2. android 闭包
  3. dependencies 闭包

3.1 apply plugin

这句是文件中的 第一行,表示的意思是在这个模块应用一个插件,插件的值有以下 2 种:

  • com.android.application:如果是这个值,则代表这个模块是一个Android应用程序,可以独立运行,生成apk文件。
  • com.android.library:如果是这个值,代表这个模块是一个Android model,不能够独立运行,必须依附于application才能运行,项目构建后生成的是一个aar文件。

Tips:
apply plugin: ‘com.android.application’ 表示这是一个应用程序模块
apply plugin: ‘com.android.library’ 标识这是一个模块module
区别: 前者可以直接运行,后者是需要依附在应用程序上运行的






3.2 android闭包

这个闭包主要是配置我们打包的一些信息,包括包名,版本号,版本名称,混淆配置,签名信息等。

下面我们详细介绍下:

  • compileSdkVersion: 设置编译时的 Android 版本。
  • buildToolsVersion: 设置编译时构建工具的版本。

3.2.1 defaultConfig{}闭包:

这个闭包里主要是设置包的一些基本信息,如包名,版本号等。

  • applicationId: 设置打包后的 APK 的包名。
  • minSdkVersion: 设置 apk 最低的支持 Android 版本,如果手机的 Android 系统版本低于这个值,app 一般无法安装。
  • targetSdkVersion: 设置项目的目标版本,表示应用程序在该版本上已经做过充分的测试,系统会为该应用启动一些对应该目标系统的最新功能特性。

Tips: Android系统的行为变更,只有 targetSdkVersion 的值设置为大于或等于该手机系统的 API 版本时,才会生效。例如,设置 targetSdkVersion 为 28,对应为 Android 系统版本为 9.0,在 Android 10.0(对应 targetSdkVersion 为 29)系统的手机上,Android 10.0 拥有的新特性[如外存中私有目录权限变更等功能]就不会被启用。

  • versionCode: 设置 APK 包的版本号,一般情况每次打包都要 +1,否则会无法覆盖安装。
  • versionName: 表示版本名称,展示在 APP 的关于里面或是应用市场上。
  • testInstrumentationRunner: 设置单元测试,android.support.test.runner.AndroidJUnitRunner表明是要使用AndroidJUnitRunner进行单元测试。

3.2.2 buildTypes{}闭包:

这个闭包主要是配置我们打包的,一般包含两个闭包releasedebug分别对应的是打Release包还是Debug包。所谓Debug包就是我们直接运行的包,这个包的配置新建项目时是省略没有写的。

 buildTypes { release {// 生产包配置 minifyEnabled true//是否混淆 shrinkResources true//是否启用未使用资源的收缩 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆的规则文件 signingConfig signingConfigs.release//设置签名信息 zipAlignEnabled true//是否对APK包执行ZIP对齐优化,减小zip体积 renderscriptOptimLevel 5 //指定RenderScript的编译优化等级,一般设置为3 } debug {// 开发配置 minifyEnabled false//是否混淆 shrinkResources false//是否启用未使用资源的收缩 signingConfig signingConfigs.release//设置签名信息 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆的规则文件 zipAlignEnabled true//是否对APK包执行ZIP对齐优化,减小zip体积 renderscriptOptimLevel 5 } } 

从上面的代码中我们可以看到releasedebug的配置基本差不多。关于每个字段的具体的意义上面注释中有写,下面就不多做说明了。我们下面主要看下signingConfig这个字段,这个是设置 APP 的签名信息的。

 //签名 signingConfigs { //你自己的keystore信息 releaseConfig { storeFile file(rootProject.ext.store_file) storePassword rootProject.ext.store_password keyAlias rootProject.ext.key_alias keyPassword rootProject.ext.key_password v1SigningEnabled true v2SigningEnabled true } } 

Tips: 签名信息设置signingConfig闭包是在最外层的,也就是和buildTypes闭包是在同一层级的。千万不要把它放在buildTypes闭包里面。

3.2.3 dependencies 闭包

这个闭包是项目运行所需要的依赖。如我们需要引用的本地 libs 目录下的第三方的 jar 包或是 aar 包,还可以是 maven 库里面的第三方的开源库 [如 support-v4 support-v7 包等]。

Tips: 这里我们要和最外层的build.gradle文件的dependencies闭包区分开来。这里的 dependencies 闭包是配置项目运行时引入的第三方库。而最外层的文件中的 dependencies 闭包是配置构建项目时的 Gradle 的版本。

4. gradle文件夹

gradle 文件夹主要是配置 gradle-wrapper 的,我们看到它的目录下有个wrapper目录,下面有gradle-wrapper.jargradle-wrapper.properties两个文件。

Gradle 配置详解

下面我们看下gradle-wrapper.properties文件的内容,我们会发现它是配置 Gradle 版本的。看着毫不起眼,但是它却非常重要,关于它的详细介绍我们下一节会做详细的讲解。

#Mon Mar 01 07:39:30 CST 2021 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip 

5. setting.gradle 文件

这个文件其实非常简单,就是配置项目的模块的,有几个模块就在 setting.gradle 文件里面添加它们的名字就行了。默认创建只有app在里面:

include ':app' //如果,我们的项目中有person,common,home等模块时,可以这样引入 include ':app',':person',':common',':home' 

6. gradle.projects 文件

这个文档一般我们在日常开发中不需要去动它,这个文档主要是项目范围的梯度设置,通过 AndroidStudio 配置的渐变设置将覆盖此文件中指定的任何设置。

# 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=-Xmx1024m
# 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

通过上面的代码我们看到主要有一句没有注释,第 9 行,这句的作用就是设置运行时的最大内存。

Tips: 这里分享一个经验,如果你的电脑编译项目耗时比较久,我们可以修改这个文件的配置,适当增加编译时的内存,使 Gradle 独立运行。笔者亲测有效:第11、12行。

# 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=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# 提高AndroidStudio的并发性,使Gradle独立运行。
org.gradle.parallel=true
org.gradle.daemon=true

7. gradlew 和 gradlew.bat 文件

这两个文件其实就是 Gradle 启动的脚本文件,我们可以使用gradlew命令来打包相当于gradle命令。关于gradle的命令我们后面有一节专门介绍。这节我们看下这两个文件的区别,以及怎么使用gradlew命令。
下面我们看看这两个文件的前面几行:
gradlew 文件




#!/usr/bin/env sh Gradle start up script for UN*X 

gradlew.bat 文件

@if "%DEBUG%" == "" @echo off @rem @rem @rem Gradle startup script for Windows @rem @rem 

通过上面的注释我们可以看到,原来这两个文件的作用是你一样的,都是 Gradle 启动的脚本文件,不过gradlew文件是 Linux 系统或是 Unix 系统的脚本文件,而gradlew.bat是 Windows 系统的脚本文件。
使用 gradlew 命令,以 clean 命令为例,我们只需要在 AndroidStudio下输入如下命令:

//Windows系统 gradlew clean //Linux系统或是Mac系统 ./gradlew clean 

Tips: 我们可能在 MAC 或是 Linux 系统中遇到bash: ./gradlew: Permission denied这个错误,这是因为没有权限。我们只需要执行chmod +x gradlew这个命令后,再执行./gradlew clean命令就 OK 了。

8. .gradle 文件夹

这个文件其实我们不用太在意它,这个文件夹是项目构建的一个缓存的目录。只要我们打开一个 Android 项目,它就会生成这个文件夹。是一个临时的文件夹。

9. 小结

本节我们主要为大家介绍了 AndroidStudio 中 Android 项目的结构,及相关 Gradle 知识的详解。我们回顾一下前面所说的 7 个文件的作用:

  • 根目录下的 build.gradle: 顶级构建文件,配置 Gradle 版本和 Maven 依赖;
  • app 目录下的 build.gralde文件: app 打包和签名配置,及模块的依赖;
  • gradle 文件夹: 配置 gradel-wrapper;
  • setting.gradle 文件: 添加编译的所有模块;
  • gradle.projects 文件: 项目范围的梯度设置,编译内存,Gradle 并发性等设置;
  • gradlew 和 gradlew.bat 文件: Gradle 启动脚本文件;
  • .gradle 文件夹: 编译时的缓存文件夹。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205419.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午6:04
下一篇 2026年3月19日 下午6:04


相关推荐

  • windows如何恢复默认pycharm配置

    windows如何恢复默认pycharm配置关闭 pycharm 点击 File gt ManageIDEset gt RestoreDefau 重启打开就 ok 了

    2026年3月27日
    2
  • Flake8学习

    Flake8学习                 转载: Python静态代码检查工具Flake8   Flake8简介

    2025年11月3日
    5
  • es6数组 newSet 数组去重 并集 交集 差集

    es6数组 newSet 数组去重 并集 交集 差集数组去重vararr=[1,2,3,3,1,4];[…newSet(arr)];//[1,2,3,4]Array.from(newSet(arr));//[1,2,3,4][…newSet(‘ababbc’)].join(’’);//“abc”字符串去重newSet(‘icedoughnut’);//Set(11){“i”,“c”,“e”,””,“d”,…}并集vara=newSet([1,2,3]);varb=ne

    2025年7月27日
    5
  • 记录一次maven JVM 调优

    记录一次maven JVM 调优记录一次mavenJVM调优前言记录一次无(摸)聊(鱼)的GC调优过程,本着学以致用、务实求真的精神,看了《深入理解Java虚拟机》中作者对自己的开发ideeclipse工具做了JVM调优,觉得很有意思。感觉这个确实是可以用自己的知识来提升开发效率,所以就有了这次的玄学调优之旅,文中如果有错误,希望能够指出,非常感谢。优化背景我本人目前有个工作上的项目,编译的时间大概需要30多秒,这次的目标就是从JVM的层面折腾、优化编译速度,那么就开始吧编译时间基准线优化前的编译时间,先

    2022年5月14日
    51
  • 【用户画像】从0到1掌握用户画像知识体系

    【用户画像】从0到1掌握用户画像知识体系一、初始用户画像1.1用户画像随着用户的一切行为数据可以被企业追踪到,企业的关注点日益聚焦在如何利用大数据为经营分析和精准营销服务,而要做精细化运营,首先要建立本企业的用户画像。提到用户画像的概念,我们区分下用户角色(Persona)和用户画像(Profile):1.1.1用户角色用户角色本质是一个用以沟通的工具,当我们讨论产品、需求、场景、用户体验的时候,为了避免在目标用户理解上的分歧,用户角色应运而生。用户角色建立在对真实用户深刻理解,及高精准相关数据的概括之上,虚构的包含典型用

    2022年5月25日
    105
  • pycharm配置python2.7.6环境_pycharm如何配置python环境

    pycharm配置python2.7.6环境_pycharm如何配置python环境pycharm 配置 python 环境的方法是 1 依次点击 File ProjectInter 2 点击 ShowAll 选择 ExistingEnvi 3 选择 python 的安装路径 点击 OK 即可 配置方法 推荐学习 Python 入门教程 1 打开软件 依次点击 File Settings Project ProjectInter

    2026年3月27日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号