📜  面向 Android 开发者的 Gradle

📅  最后修改于: 2022-05-13 01:58:44.970000             🧑  作者: Mango

面向 Android 开发者的 Gradle

作为开发人员,我们大部分时间都在编写干净、节省内存的代码,但最终用户只能看到安装在设备上的最终应用程序构建。那么,我们的代码和 XML 文件是如何用于生成构建的呢? Android Studio 中的 Gradle 允许这样做。因此,我们作为开发人员讨论的不是通常的编码标准,而是让我们在本文中了解 Gradle 以进行更改!在本文中,我们将学习:

  1. Gradle 到底是什么?
  2. Gradle 在 Android 开发中的作用是什么?
  3. Gradle for Android 是 Android 的 Gradle 插件。
  4. Gradle 插件到底是什么?
  5. 为什么一个Android项目中有多个build.gradle文件?
  6. 项目级 build.gradle 文件中的各个字段是什么意思?
  7. Gradle 任务到底是什么?如何制作自己的 Gradle 任务?
  8. 我们如何使用命令行来构建 Gradle?
gradle 构建运行

gradle 构建运行

摇篮

Gradle 是一个专注于灵活性和性能的开源构建自动化工具。因此,简单地说,它是一个创建应用程序构建的自动化工具。 Gradle 是 Android 的官方构建工具。

Gradle在Android开发中的函数

每当我们尝试通过 USB 将开发的代码运行到模拟器或实际设备中时,我们都可以在 IDE 中看到“Gradle Build Running”的过程。

适用于 Android 的 Gradle 插件

Android Studio 和 Gradle 都不知道如何将Java和 Kotlin 代码编译成 APK。是的,这是正确的!那么,Gradle 如何在构建过程中帮助我们呢?

Gradle 插件

Gradle 无法自行自动化大部分构建过程。这就是为什么,如果我们回到我们讨论 Gradle 定义的部分,它的重点是“灵活性”。作为 Android 开发者,我们应该记住,我们项目中必须使用的第三方库应该作为依赖添加到我们的应用级 Gradle 文件中,并且只有在将 Gradle 与项目同步后才能访问它们的类。 Gradle 的灵活性是通过包含“插件”功能实现的。您可以浏览所有可供下载的 Gradle 插件。

一个 Android 项目可能包含多个 build.gradle 文件

当我们启动一个新的 Android 项目时,我们会看到两个不同的 build.gradle 文件。一个是项目级别,另一个是应用程序级别。那么,这里的“应用程序”到底是什么?术语“app”指的是项目模块。模块到底是什么?根据 Android Developers 的文档。模块是一组源文件和构建设置,允许您将项目划分为离散的功能单元。您的项目可能包含一个或多个模块,一个模块可能依赖于另一个模块。每个模块都可以独立构建、测试和调试。

项目级 gradle 文件

项目级 gradle 文件

我们应该从项目级别的 build.gradle 文件中了解三个字段(区域):

  1. 将下载项目依赖项的存储库(在本例中为 google 和 jcenter)
  2. 必须在项目级别满足的依赖项(对所有子项目或模块有用)。我们可以看到整个项目都使用了 Gradle 和 Kotlin 依赖项,所以在这里(在项目级别)声明了它们。
  3. 应下载所有子项目/模块的存储库(在本例中为 google 和 jcenter)
了解船上的 gradle 结构

了解船上的 gradle 结构

  1. 我们包含了必要的插件,例如 Android Gradle 插件和 Kotlin 插件。
  2. 这是 android 块,其中包含所有要求的列表。这仅是可能的,因为我们在第 1 步中使用了 Android Gradle 插件。
  3. 必须根据要求包括各种构建类型。可以在此处找到有关构建类型的更多信息。
  4. 最后,列出了该模块或子项目所需的所有第三方依赖项。

当 Android Studio 中的构建过程开始时会发生什么?

现在我们了解了为什么我们有不同的 build.gradle 文件以及 Gradle 文件中不同字段的含义,让我们看看当我们单击运行按钮时会发生什么。

用一些更简单的术语来说:

  1. 编译器将您的源代码转换为 DEX(Dalvik 可执行文件)文件,其中包含在 Android 设备上运行的字节码,并将其他所有内容转换为已编译资源。
  2. APK Packager 将 DEX 文件和编译资源组合成一个 APK。 APK 必须先签名,然后才能在 Android 设备上安装和部署。
  3. APK 打包器使用调试或发布密钥库来签署您的 APK。
  4. 如果您正在创建应用程序的调试版本,即仅用于测试和分析的应用程序,则打包程序将使用调试密钥库对其进行签名。默认情况下,Android Studio 会为新项目创建一个调试密钥库。
  5. 如果您正在创建应用程序的发布版本以供外部分发,则打包程序会使用发布密钥库对其进行签名。
  6. 阅读有关在 Android Studio 中为您的应用签名以创建发布密钥库的信息。
  7. 在生成最终 APK 之前,打包程序会优化您的应用程序,以便在使用 zipalign 工具在设备上运行时使用更少的内存。
  8. 在构建过程结束时,您将获得应用的调试 APK 或发布 APK,您可以使用它们来部署、测试或发布给外部用户。

梯度过程

Gradle Task 是 Gradle 执行的操作。例如,当您在 Android Studio 中按下运行按钮时,会启动一个 Gradle 任务。

毕业任务

毕业任务

如果我们从底部导航栏保持构建窗口打开并单击运行图标,我们可以在控制台上看到 Gradle 任务列表。

使用命令行运行 Gradle 任务

我们可以使用命令行复制 Gradle 任务部分中描述的行为吗?是的,我们可以使用底部导航栏打开终端并输入:

./gradlew assembleDebug --console plain

我们可以看到,这些任务与我们在 Android Studio 中单击运行按钮时看到的任务相同。结果,这里点击运行按钮触发的任务就是“assembleDebug”。这是我们使用的命令的描述;

./gradlew tasks

指示使用 Gradle Wrapper。强烈建议始终使用 Wrapper 版本。有关 Gradle Wrapper 的更多信息,请参见 assemble。我们刚刚要求它运行的任务称为调试。

——控制台简单地指示 Gradle 打印构建日志,与它在 Android Studio 中显示的完全一样。提及这一点完全是可选的。我们还可以看到,通过从终端运行命令显示的任务列表与右上角的 Gradle 控制台中可用的任务列表相匹配。

创建独特的任务

我们已经看到并理解了如何从命令行运行“assembleDebug”任务。如果我们想创建自己的任务怎么办:假设我们想通过创建自定义任务来清理项目。可以将此任务添加到项目的 build.gradle 文件中:

task clean(type: Delete) {
    delete rootProject.buildDir
}

这将运行 clean 命令,该命令根据任务声明中指定的命令删除构建目录。通过从“Build”菜单中选择“Clean Project”可以获得相同的结果。但是,如果我们想自定义我们的任务,我们可以这样做。

Gradle 现在在项目级 build.gradle 文件中默认提供此任务。考虑最常见的用例之一。假设在我们使用 assembleDebug 进程构建我们的 apk 后,我们希望将 apk 复制到桌面并将其重命名为“app-debug.apk”以外的名称。我们要怎么做?

Kotlin
task getDebugAppInDesktopFolder(dependsOn: 'assembleDebug') {
    doLast {
        def destination = "Put the desired path"
        def desiredName = "Put the desired name"
        ext.apk = file("build/outputs/apk/debug/app-debug.apk")
  
        if (ext.apk.exists()) {
            copy {
                from ext.apk.absolutePath
                into destination
                rename { desiredName }
            }
        }
    }
}


结论

'getDebugAppInDesktopFolder' 是我们任务的名称,而 'assembleDebug' 是我们当前 Gradle 任务所依赖的任务。 (assembleDebug 是生成我们的 'app-debug.apk' 文件的任务。)最后,在我们的 doLast 块中,我们从系统属性中获取用户名,以便它可以是动态的,然后我们将 apk 文件复制到桌面如果它已经存在。这使我们不必找到“app-debug.apk”文件,将其复制到我们的桌面,然后重命名它。就这样!这就是我们想要在这篇关于 Gradle for Android Developers 的博客文章中介绍的全部内容。