如何使用 Gradle 构建 Android 应用程序?
现在有几种可用的当代构建自动化技术可用于在创建项目时创建更快的构建。 Gradle 是这些现代自动化技术之一。 Android 现在使用 Gradle 来自动化和控制构建过程,同时还定义了灵活的自定义构建设置。因此,需要使用 Gradle 等复杂的构建工具来设计或构建 Android 应用程序。
因此,在本文中,我们将学习如何使用 Gradle 来提升我们的构建。此外,我们还将学习 Android Studio 创建的 build.gradle 文件中的基本语法。我们将在本博客的后面部分了解 gradlew 任务、构建变体和许多其他用途。
Gradle 到底是什么?
在我们继续之前,让我们简单地看一下 Gradle。 Gradle 是一个复杂的构建工具包,Android Studio 使用它来自动化和控制构建过程,同时允许您设计灵活的自定义构建设置。因此,使用 Gradle,您可以构建、测试和部署您的应用程序,负责这种自动化的文件是“Build.gradle”文件。例如,Gradle 构建脚本可以执行简单的任务,例如在真正的构建过程开始之前将图片从一个位置/目录复制到另一个位置/目录。为了编译源代码和资源,Android 项目需要 Gradle。
当您在 Android Studio 中创建 Android 项目时,会自动生成 build.gradle 文件,当您在 Android Studio 中点击运行按钮时,会调用关联的 Gradle 任务,并启动或启动应用程序。当您在 Android Studio 中运行您的源代码时,它将被转换为 DEX(Dalvik 可执行文件)文件。这些 DEX 文件包含在 Android 上执行程序所需的字节码。 APK Packager 用于将多个 DEX 文件与应用程序的资源捆绑在一起。然后,APK 打包器使用调试或发布密钥库对您的 APK 进行签名,在创建最终 APK 之前,它会优化您的程序以删除不必要的代码。
创建配置文件
当您在 Android Studio 中创建一个新项目时,它会为您生成几个文件。让我们首先定义这些文件的范围和用途。一个典型的Android项目的项目视图如下:
- Gradle 配置文件:文件 settings.gradle 可以在根目录中找到。它由应用程序中包含的所有模块组成。
- 顶层构建文件是 build.gradle 文件,存储在根目录中。如果您希望对项目中的所有模块使用相同的配置,请在此文件中声明它们。
- 模块级构建文件如下:模块级 build.gradle 文件,可以在每个 project/module/ 目录中找到,允许我们为放置它的模块定义构建参数。
- Gradle 配置文件:您可以在 Gradle 属性文件中定义 Gradle 工具包的参数。
Gradle 的命令
我们已经介绍了 Gradle 的基础知识,现在我们将了解一些 Gradle 命令,这些命令可用于在不使用 Android Studio 的情况下(即通过命令行)执行构建过程。您可以打开 gradle,然后使用以下命令来帮助您。
1. Gradle Wrapper: Gradle 仍在开发中,随时可能有新版本到来。 Gradle Wrapper 用于在运行 Gradle 指令时提供无缝流程。在 Mac OS 或 Linux 上,Gradle Wrapper 是一个名为 gradlew 的 shell 脚本,而在 Windows 上,它是一个名为 gradlew.bat 的批处理文件。因此,如果您运行此脚本并且指定版本的 Gradle 不存在,它将为您下载所选版本的 Gradle。
如果你使用 Android Studio 构建一个 Android 项目,这个 Gradle Wrapper 会自动生成。如果您想制作自己的 Gradle Wrapper,请从此处下载 Gradle,然后在您的项目目录中执行以下命令:
$ gradle wrapper --gradle-version x.x
2. gradlew: Gradle 包装器是 gradlew。如果您使用 Android Studio 构建 Android 项目,请在命令行中导航到项目的根目录
这将提供您可以使用 Gradle 执行的操作的列表:
> Task :help
Welcome to Gradle 5.1.1.
To run a build, run gradlew ...
To see a list of available tasks, run gradlew tasks
To see a list of command-line options, run gradlew --help
To see more detail about a task, run gradlew help --task
For troubleshooting, visit https://help.gradle.org
3. gradlew 责任:这用于显示可用工作的列表。在命令行中,键入以下命令:
> Task :tasks
-----------------------------------------------------------
Tasks runnable from root project
-----------------------------------------------------------
Android tasks
-------------
androidDependencies - Displays the Android dependencies of the project.
signingReport - Displays the signing info for the base and test modules
sourceSets - Prints out all the source sets defined in this project.
Build tasks
-----------
assemble - Assemble main outputs for all the variants.
assembleAndroidTest - Assembles all the Test applications.
build - Assembles and tests this project.
buildDependents - Assembles and tests this project and all projects that depend on it.
buildNeeded - Assembles and tests this project and all projects it depends on.
bundle - Assemble bundles for all the variants.
clean - Deletes the build directory.
cleanBuildCache - Deletes the build cache directory.
compileDebugAndroidTestSources
compileDebugSources
compileDebugUnitTestSources
compileReleaseSources
compileReleaseUnitTestSources
Build Setup tasks
-----------------
init - Initializes a new Gradle build.
wrapper - Generates Gradle wrapper files.
4. gradlew lint: gradlew lint 命令用于发现整个项目的错误,即寻找不同的错误、拼写错误和漏洞。当您位于项目的根目录时,您可以使用所有这些命令
> Task :app:lint
Ran lint on variant debug: 30 issues found
Ran lint on variant release: 102 issues found
Wrote HTML report to file:
Wrote XML report to file:
5. gradlew build:要构建您的项目,请在您的根目录中执行以下命令:
$ ./gradlew build
6 . gradlew clean build:您可以使用此命令来清除和混淆您的代码,构建将从头开始重写。
$ ./gradlew clean build
7. gradlew考试:使用以下命令进行应用测试:
$ ./gradlew test
其他 Gradle 特性
Gradle 除了在命令行上有用之外,还有许多其他功能。其中一些如下:
管理依赖版本:在一个多模块项目中,使用了许多依赖,最常见的问题是依赖的版本冲突,即只有当你有服务器的依赖时那么只有他们会运行。这些依赖项的版本很难维护,但是,Gradle 提供了一个 ext 块,我们可以在其中声明我们的公共属性值并在依赖项中使用它们。
apply plugin: 'com.android.application'
android {
defaultConfig{...}
buildTypes{...}
ProductFlavours{...}
}
ext {
supportLibraryVersion = '28.1.0'
}
dependencies {
// android supported libraries
implementation "com.android.support:appcompat-v7:$supportLibraryVersion"
implementation "com.android.support:design:$supportLibraryVersion"
implementation "com.android.support:cardview-v7:$supportLibraryVersion"
// google play service
implementation "com.google.android.gms:play-services:$playServiceVersion"
implementation "com.google.android.gms:play-services-fitness:$playServiceVersion"
// your other project files
}
构建类型和构建风味
默认情况下,Android 中有两种构建类型:调试和发布。这些建筑类型用于生成不同的应用程序变体。我们通过“风味”暗示同一个程序可能对不同的用户具有不同的功能。例如,该软件的高级版应该具有与免费版不同的功能。您可以在应用级别的 build.gradle 文件中使用 productFlavors 闭包来指定多种风味。例如,考虑以下情况:
productFlavors {
paid {
applicationId = "your app id goes here"
versionName = "1.1-paid"
}
free {
applicationId = "your app id"
versionName = "1.0-free"
}
}
创建任务
正如我们所见,./gradlew tasks 命令可用于检索可用任务列表。但是,我们也可以构建自己的任务。例如,我们可能会编写一个任务,指示 Gradle 生成一个名称中包含构建日期的 APK 文件。为此,请将以下代码添加到模块级 build.gradle 文件中:
Java
task postTopic() {
android.seeAllVariants.all { here ->
here.outputs.all { output ->
def gfg = new Date().format("dd-yyyy")
def geeksforgeeks = here.name + "_" + date + ".apk"
output.finalName = last
}
}
}
我们在这里有一个名为 postTopic() 的工作,您正在通过将变量和构建日期附加到它来创建一个新文件名。
结论
我们在本文中学习了如何在我们的 Android 项目中使用 Gradle。我们学习了几个 Gradle 命令。 Gradle 网站上提供了整套命令。