基础知识
Gradle 本身并不知道如何编译 APK 文件,因为 Gradle 实际上是一个通用的构建工具。它不限于构建 Android 应用程序。在 Gradle 的 GitHub 仓库中,它被描述为:
…构建工具,着重于构建自动化和支持多语言开发。如果您在任何平台上构建、测试、发布和部署软件,Gradle 提供了一个灵活的模型,可以支持从编译和打包代码到发布的整个开发生命周期
Gradle 本身实际上并不能做太多。所有有用的功能都来自丰富的插件生态系统。把你添加到 Android 应用程序中的所有第三方库视为插件。您可以使用这些插件来扩展应用程序的功能,就像 Gradle 使用插件来扩展自己的功能一样
Gradle_9">Android Plugin for Gradle
Android Plugin for Gradle 是一个使 Gradle 能够将您的代码编译成用你的密钥签名 APK 文件的插件,甚至将 APK 安装到你的模拟器或测试设备上。这个插件驱动你的整个构建系统
没有它,Gradle 就无法知道如何对代码做任何事情。这个插件是 Android Studio 和 Gradle 之间的魔法链。当你在 Android Studio 中启动一个全新的项目时,会获得带有“gradle”文件名的文件,所有带有“ gradle ”文字的文件都用于为我们的 Android 项目配置 Gradle 。里面存在多个文件,因为它们都有不同的用途
Gradle_Wrapper_14">Gradle Wrapper
gradle-wrapper.properties
文件有一个简单的目的:决定在构建项目时使用哪个 Gradle 版本。它将随后会自动为你下载并保存该版本的 Gradle
settings.gradle
如果你将另一个模块添加到你的工程中,Android Studio 将会自动将其添加到这个文件中
build.gradle
从 Gradle 的角度来看,我们的工程被认为是你拥有一个根项目以及一个到多个子工程。从 Android 开发者的角度来看,这些子工程被称为 module(模块)
这就是为什么你会看到两个build.gradle
文件的原因。一个是给根项目的,另一个是给伴随着你的项目的 app 模块的。让我们先看看你的根项目的格式吧
这个完整的buildscript{}
块用于告知 Gradle 脚本本身,关于编译本项目需要的那些
我们告知 Gradle 我们需要到 google() Maven 代码库和 jcenter() 代码库中检索一些事项
我们在这个 buildscript
中声明了 Android Gradle 插件的依赖性。“3.3.1” 表示要使用的插件版本
正如名字所暗示的,allprojects{}
块被用于通知 Gradle 关于所有需要编译的子项目,并使用这个代码库集合来解决所有需要的依赖项
下面我们看一下app 模块的build.gradle
这里就是你添加 Gradle 所依赖的第三方库的位置。注意在你的 app 的 build.gradle 中并没有 repositories{} 块。既然我们已经在根项目的 allprojects{} 块中声明了,这里就没有必要了
Gradle__42">Gradle 任务
任务基本上就是 Gradle 可以在构建触发时执行的事情。Android Studio 是不知道如何编译你的代码的。这是因为单击 Android Studio 中的大绿色播放按钮将触发 Gradle 执行特定任务
打开Gradle console,也就是如下图所示的位置
当我们点击AS的绿色运行按钮时, 一堆命令会出现,但我们只关心顶部的命令:
Executing tasks: [:app:assembleDebug]
我们刚刚告诉 Gradle 执行 assembleDebug 任务。 我们可以通过命令行完成同样的事情。 点击左下角的终端标签Terminal,运行这个命令:
gradlew assembleDebug
我们使用gradlew
命令的时候,会根据gradle-wrapper.properties
文件来使用对应的gradle进行构建,没有则会下载
assembleDebug
是你刚刚要求它运行的任务的名称
我们再来运行最后一个命令gradlew tasks
这个命令将列出 Gradle 目前在这个项目中所知道的所有任务,并提供每个任务的简短描述
其实和点击 Android Studio 右上角的 Gradle 标签是一样的效果
在这里双击 assembleDebug ,就可以做到与刚刚在命令行上做的一样的事情,并且和播放按钮做同样的事情
AS中查看gradle版本
File-Project Structure