Android 开发 - 充分利用Gradle

简介: Android 开发 - 充分利用Gradle

构建Android开发的代码可以通过Android Studio 中的Gradle实现。所以,抛开我们作为开发者一般讨论的正统编码标准,换一种方式,让我们在这篇文章中了解一下 Gradle!


什么是 Gradle?

Gradle 在 Android 开发中的作用是什么?

Gradle 的 Android 插件

什么是 Gradle 插件?

为什么一个 Android 项目包含多个 build.gradle 文件?

项目级别 build.gradle 文件中的不同字段表示什么?

当我们点击 Android Studio 中的绿色播放按钮时,幕后会发生什么?

什么是 Gradle 任务?如何创建自定义 Gradle 任务?

我们如何通过命令行实现 Gradle 构建?

Gradle

根据定义,Gradle 是一个专注于灵活性和性能的开源构建自动化工具


因此,简单地说,它是一个生成应用程序构建的自动化工具。Gradle 是 Android 的官方构建工具。


Gradle在Android开发中的作用

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



这是 Gradle 帮助将 Java 和 Kotlin 代码编译成 APK 的时候。那么如果 Gradle 可以做到这一点,那么什么是 Android Gradle 插件呢?


Android Gradle 插件

想知道一个有趣的事实吗?无论是 Android Studio 还是 Gradle,都不知道如何将 Java 和 Kotlin 代码编译成 APK。


对,那是正确的!


那么,Gradle 如何在构建过程中提供帮助?从官方 Android 开发者网站的这个链接中,我们可以看到:Gradle 的 Android 插件与构建工具包一起工作,以提供特定于构建和测试 Android 应用程序的流程和可配置设置


Gradle 插件

仅 Gradle 无法完成大部分自动化构建过程。这就是为什么如果我们回到我们提到 Gradle 定义的部分,它的重点是“灵活性”。


回想一下,作为 Android 开发人员,我们项目中必须使用的第三方库应该作为依赖项添加到我们的应用级 Gradle 文件中,并且只有在将 Gradle 与项目同步后才能访问它们的类。这就是 Gradle 通过提供“插件”功能而足够灵活的原因。


您可以在此处查看所有可供下载的 Gradle 插件以及 Gradle 本身提供的核心插件列表。


Android 项目中的多个 build.gradle 文件

每次,我们启动一个新的 Android 项目,我们都可以看到存在两个不同的 build.gradle 文件。一个在项目级别,另一个在应用级别。那么,这里的“应用程序”是什么?“app”是项目的一个模块。现在,什么是模块?根据 Android 开发者的文档,


模块是源文件和构建设置的集合,允许您将项目划分为离散的功能单元。您的项目可以有一个或多个模块,一个模块可能使用另一个模块作为依赖项。每个模块都可以独立构建、测试和调试。

由于模块是基于功能的,每个模块都有其依赖项或第三方库,因此每个模块都有自己的 Gradle 文件。想了解项目中可以包含哪些不同类型的模块?你可以看看这里。


build.gradle 文件中的字段


从项目级别的 build.gradle 文件来看,我们应该了解的主要是三个字段(区域):


1.要从中下载项目依赖项的存储库(在本例中为 google 和 jcenter)

2.项目级别所需的依赖项(对所有子项目或模块有用)。我们可以看到整个项目都使用了 Gradle 依赖项和 kotlin 依赖项,因此在这里(在项目级别)声明了它。

3.要下载所有子项目/模块的存储库(在本例中为 google 和 jcenter)

1.我们添加了所需的插件:android Gradle 插件以及所需的 kotlin 插件

2.这是列出所有要求的 android 块。这仅适用于我们在步骤 1 中应用了 android Gradle 插件。

3.根据要求包含的不同构建类型。您可以在此处了解有关构建类型的更多信息。

4.最后,此相应模块或子项目所需的所有第三方依赖项。


当构建过程在 Android Studio 上启动时会发生什么?

现在我们已经了解了为什么我们有不同的 build.gradle 文件以及 Gradle 文件中不同的字段表示什么,让我们了解单击运行按钮时会发生什么。来自官方文档:

用一句话来说:


    编译器将您的源代码转换为 DEX(Dalvik 可执行文件)文件,其中包括在 Android 设备上运行的字节码,以及将其他所有内容转换为已编译资源的内容。

    APK 打包器将 DEX 文件和编译资源组合到一个 APK 中。在您的应用程序可以安装并部署到 Android 设备上之前,必须对 APK 进行签名。

    APK Packager 使用调试或发布密钥库对您的 APK 进行签名。

    如果您正在构建应用程序的调试版本,即仅打算用于测试和分析的应用程序,则打包程序会使用调试密钥库对您的应用程序进行签名。Android Studio 使用调试密钥库自动配置新项目。

    如果您正在构建您打算在外部发布的应用程序的发布版本,则打包程序会使用发布密钥库对您的应用程序进行签名。

要创建发布密钥库,请阅读有关在 Android Studio 中为您的应用签名的信息。

     在生成最终 APK 之前,打包程序使用zipalign工具优化您的应用程序,以便在设备上运行时使用更少的内存。

     在构建过程结束时,您拥有应用的调试 APK 或发布 APK,可用于部署、测试或发布给外部用户。


Gradle任务

Gradle Task 是 Gradle 执行的操作。例如,当在 Android Studio 中按下运行按钮时,会触发 Gradle 任务。



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


通过命令行运行 Gradle 任务

我们可以通过命令行实现 Gradle 任务部分中讨论的相同行为吗?是的,我们可以从底部导航栏打开终端并输入:


./gradlew assembleDebug --console plain

我们可以看到,这与我们通过单击 Android Studio 中的运行按钮观察到的任务集相同。因此,这里通过单击运行按钮触发的任务是“assembleDebug”。这里的描述来自我们使用的命令;


1. ./gradlew表示使用 Gradle Wrapper。强烈建议始终使用 Wrapper 版本。您可以在此处了解有关 Gradle Wrapper 的更多信息

2.  assembleDebug是我们刚刚要求它运行的任务的名称。

3.  --console plain 告诉 Gradle 打印出构建日志,就像您在 Android Studio 中看到的一样。提及这一点是完全可选的。

同样,如果要查看可用的 Gradle 任务列表,可以使用以下命令:


./gradlew tasks

您将能够看到所有可用 Gradle 任务的列表:


我们还可以观察到,从终端执行命令显示的任务列表与右上角 Gradle 控制台中可用的任务相似。


创建自定义任务

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


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


现在当我们在终端上提供


    ./gradlew clean

    这将根据声明的任务中给出的命令执行删除构建目录的 clean 命令。通过选择“Build”菜单下的“Clean Project”选项也可以获得同样的效果。但是,如果我们想定制我们的任务,这就是我们可以实现它的方式。


    现在这个任务是 Gradle 在项目级别 build.gradle 文件中默认提供的。现在,让我们考虑一个常见的用例。假设一旦我们通过 assembleDebug 过程构建我们的 apk,我们希望将 apk 复制到桌面并将其重命名为我们自己的选择,而不是保留“app-debug.apk”的名称。我们怎样才能做到这一点?


    是的!通过在应用级 build.gradle 文件中创建自定义 Gradle 任务:

      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 块中,我们从系统属性中获取用户名,这样它就可以是动态的,并且如果它存在于桌面上,则将其复制到桌面上。


      这使我们的工作更容易,而不是找到“app-debug.apk”文件,将其复制到我们的桌面然后重命名。

      相关文章
      |
      3天前
      |
      Dart 前端开发 Android开发
      【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
      【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
      【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
      |
      1月前
      |
      搜索推荐 前端开发 API
      探索安卓开发中的自定义视图:打造个性化用户界面
      在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
      65 19
      |
      1月前
      |
      JSON Java API
      探索安卓开发:打造你的首个天气应用
      在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
      70 14
      |
      1月前
      |
      Java Linux 数据库
      探索安卓开发:打造你的第一款应用
      在数字时代的浪潮中,每个人都有机会成为创意的实现者。本文将带你走进安卓开发的奇妙世界,通过浅显易懂的语言和实际代码示例,引导你从零开始构建自己的第一款安卓应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇门,让你的创意和技术一起飞扬。
      |
      1月前
      |
      XML 存储 Java
      探索安卓开发之旅:从新手到专家
      在数字时代,掌握安卓应用开发技能是进入IT行业的关键。本文将引导读者从零基础开始,逐步深入安卓开发的世界,通过实际案例和代码示例,展示如何构建自己的第一个安卓应用。我们将探讨基本概念、开发工具设置、用户界面设计、数据处理以及发布应用的全过程。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你提供宝贵的知识和技能,帮助你在安卓开发的道路上迈出坚实的步伐。
      40 5
      |
      1月前
      |
      开发框架 Android开发 iOS开发
      安卓与iOS开发中的跨平台策略:一次编码,多平台部署
      在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
      144 3
      |
      1月前
      |
      XML 搜索推荐 前端开发
      安卓开发中的自定义视图:打造个性化UI组件
      在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
      |
      1月前
      |
      搜索推荐 前端开发 测试技术
      打造个性化安卓应用:从设计到开发的全面指南
      在这个数字时代,拥有一个定制的移动应用不仅是一种趋势,更是个人或企业品牌的重要延伸。本文将引导你通过一系列简单易懂的步骤,从构思你的应用理念开始,直至实现一个功能齐全的安卓应用。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你提供必要的工具和知识,帮助你将创意转化为现实。
      |
      1月前
      |
      Java Android开发 开发者
      探索安卓开发:构建你的第一个“Hello World”应用
      在安卓开发的浩瀚海洋中,每个新手都渴望扬帆起航。本文将作为你的指南针,引领你通过创建一个简单的“Hello World”应用,迈出安卓开发的第一步。我们将一起搭建开发环境、了解基本概念,并编写第一行代码。就像印度圣雄甘地所说:“你必须成为你希望在世界上看到的改变。”让我们一起开始这段旅程,成为我们想要见到的开发者吧!
      45 0
      |
      1月前
      |
      存储 监控 Java
      探索安卓开发:从基础到进阶的旅程
      在这个数字时代,移动应用已成为我们日常生活的一部分。对于开发者来说,掌握安卓开发不仅是技能的提升,更是通往创新世界的钥匙。本文将带你了解安卓开发的核心概念,从搭建开发环境到实现复杂功能,逐步深入安卓开发的奥秘。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的见解和技巧,帮助你在安卓开发的道路上更进一步。
      30 0