使用 Gradle 构建 Android 应用程序

前言

如今,有各种现代构建自动化工具用于在开发项目时进行更快的构建。这些现代自动化工具之一是 Gradle。今天,Android 正在使用 Gradle 来自动化和管理构建过程,同时定义灵活的自定义构建配置。因此,有必要使用这种高级构建工具包(即使用 Gradle)来开发或构建 Android 应用程序。因此,在这篇博客中,我们将学习如何使用 Gradle 来增强我们的构建。此外,我们还将学习Android Studio 生成的build.gradle文件中的基本语法。稍后在本博客中,我们将了解 gradlew 任务、构建变体和 Gradle 的许多其他可用于构建 Android 应用程序的应用程序。那么,让我们开始吧。

什么是 Gradle?

在继续之前,让我们快速介绍一下 Gradle。Android Studio 使用高级构建工具包Gradle来自动化和管理构建过程,同时允许您定义灵活的自定义构建配置。因此,在 Gradle 的帮助下,您可以构建、测试和部署您的应用程序,负责此类自动化的文件是“ Build.gradle ”文件。例如,将一些图像从一个地方/目录复制到另一个地方/目录的简单任务可以在实际构建过程发生之前由 Gradle 构建脚本执行。Android 项目需要 Gradle 来将源代码和资源放在一起。

默认情况下,当您在 Android Studio 中创建 Android 项目时,会自动生成该项目的build.gradle文件,当您在 Android Studio 中按下运行按钮时,将调用相应的 Gradle 任务,应用程序将启动或启动。

当您在 Android Studio 中按下运行按钮时,您的源代码将被转换为 DEX(Dalvik Executable) 文件。这些 DEX 文件包括在 Android 上运行应用程序所需的字节码。在 APK Packager 的帮助下,将各种 DEX 文件与应用程序的资源组合在一起。之后,APK 打包器使用调试或发布密钥库对您的 APK 进行签名,并且在生成最终 APK 之前,打包器会优化您的应用以删除无用的代码。

构建配置文件

当您在 Android Studio 上启动一个新项目时,它会为您创建一些文件。让我们了解这些文件的范围和用途。下面是一个典型的 Android 项目的项目视图:

图片提供:Android 开发者网站

  • Gradle 设置文件: settings.gradle文件位于根目录中。它由应用程序中存在的所有模块组成。
  • 顶层构建文件:顶层build.gradle文件,位于根目录。如果你想对项目的所有模块应用相同的配置,那么你应该在这个文件中定义它们。
  • 模块级构建文件:模块级build.gradle文件位于每个project/module/目录中,允许我们为其所在的特定模块配置构建设置。
  • Gradle 属性文件:要指定 Gradle 工具包的设置,您可以在 Gradle 属性文件中指定这些设置。

Gradle命令

到目前为止,我们已经了解了 Gradle 的基础知识,现在我们将研究 Gradle 的一些命令,这些命令可用于在不使用 Android Studio 的情况下执行构建过程,即使用命令行。建议您应该通过命令行学习使用 Gradle,因为这样做会帮助您了解构建过程是一种更好的方式。

  1. Gradle Wrapper:由于 Gradle 正在开发中,新版本可以随时发布。因此,为了在执行 Gradle 命令时流畅运行,使用了Gradle Wrapper。Gradle Wrapper在 Mac OS 或 Linux 上是一个名为gradlew的 shell 脚本,在 Windows 上是一个名为gradlew.bat的批处理文件。因此,当您运行此脚本且所选版本的 Gradle 不存在时,这将自动下载所选版本的 Gradle。

如果您在 Android Studio 的帮助下创建一个 Android 项目,那么这个 Gradle Wrapper 将被自动创建。如果你想自己创建 Gradle Wrapper,那么你必须首先从这里下载 Gradle,然后在你的项目目录中运行以下命令:

$ gradle wrapper --gradle-version x.x

这里, xx 是你的 Gradle 版本。要查找 Gradle 版本,请使用以下命令:

$ gradle -v
  1. gradlew: gradlew 是 Gradle 包装器。如果您已经使用 Android Studio 创建了 Android 项目,请在命令行中转到项目的根目录并运行以下命令:
$ ./gradlew

这将显示您可以使用 gradle 执行的操作列表:

> Task :help
Welcome to Gradle 5.1.1.
To run a build, run gradlew <task> ...
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 <task>
For troubleshooting, visit https://help.gradle.org
  1. gradlew tasks:这用于显示可用的任务列表。在命令行中运行以下命令:
$ ./gradlew tasks

这将显示一个列表,其中包含所有任务:

> 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.
  1. gradlew lint: gradlew lint 命令用于查找整个项目中的错误,即查找各种错误、拼写错误和漏洞。在根目录下运行以下命令:
$ ./gradlew lint

您将获得输出,如下所示:

Task :app:lint
Ran lint on variant debug: 47 issues found
Ran lint on variant release: 47 issues found
Wrote HTML report to file:///Users/username/path/to/your/Android/projects/MindOrks/app/build/reports/lint-results.html
Wrote XML report to file:///Users/username/path/to/your/Android/projects/MindOrks/app/build/reports/lint-results.xml

为了在 Linux 中查看结果,请键入以下内容:

xdg-open app/build/reports/lint-results.html

或在 Mac 中,使用以下行:

open app/build/reports/lint-results.html

这将打开您的默认浏览器以显示生成的结果。

  1. gradlew build:要构建您的项目,请在命令行的根目录中运行以下代码:
$ ./gradlew build
  1. gradlew clean build:这用于清理你的构建,即构建将从头开始进行。
$ ./gradlew clean build
  1. gradlew test:要运行应用程序测试,请使用以下命令:
$ ./gradlew test

其他 Gradle 属性

除了在命令行中使用 Gradle 之外,Gradle 还提供了许多其他功能。其中一些在下面提到:

  • 管理依赖版本:在多模块项目中,使用了许多依赖项,因此,出现的最大问题是依赖项版本冲突,即您应该拥有相同版本的依赖项。管理这些依赖项的版本非常困难,但Gradle提供了ext块,我们可以在其中定义我们的公共属性值并在依赖项中使用它们。
apply plugin: 'com.android.application'
        
android {
    defaultConfig{...}
    buildTypes{...}
    ProductFlavours{...}
}

ext {
    supportLibraryVersion = '28.0.0'
    playServiceVersion = '16.0.1'

}

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"

    //other dependencies
}
  • 构建类型和构建风格:默认情况下,在 Android 中,有两种构建类型,即debug和release。这些构建类型用于创建不同风格的应用程序。使用风味这个词,我们的意思是说同一个应用程序对于不同的用户可以有不同的属性。例如,应用程序的付费版本的功能应该与非付费版本的功能不同。为了定义不同的风味,您可以在应用级别的build.gradle文件中使用productFlavors闭包。以下是相同的示例:
productFlavors {
    paid {
        applicationId = "app id goes here"
        versionName = "1.0-paid"
    }
free {
        applicationId = "app id goes here"
        versionName = "1.0-free"
    }
}

创建任务:我们已经看到,我们可以使用./gradlew tasks命令来查找可用任务列表。但我们也可以创建自己的任务。例如,要创建一个任务,我们希望 Gradle 生成一个名称中包含构建日期的 APK 文件。为此,您可以在模块级build.gradle文件中添加以下代码:

task addCurrentDate() {
    android.applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def date = new Date().format("dd-MM-yyyy")
            def fileName = variant.name + "_" + date + ".apk"
            output.outputFileName = fileName
        }
    }
}

在这里,我们有一个名为 addCurrentDate() 的任务,您正在通过向其中添加变量和构建日期来创建新文件名。

结论

在这篇文章中,我们学习了如何在我们的 Android 项目中使用 Gradle。我们学习了 Gradle 的一些命令。您可以在Gradle 的网站上找到完整的命令列表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值