Gradle系列-引导篇(一)

gradle.png

题外话:其实原本不想取这个名字的,可是感受不取这个名字感受没有几我的看啊。你们确定以为这个名字比较高大上吧!哈哈哈哈。好了,收。java

前言

在平时Android开发中咱们经常使用Gradle来构建咱们的项目,我相信你们均可能遇到如下问题:git

  • 开启项目提示界面一直显示Gradle Build Running
  • Gradle传递性依赖冲突
  • 多渠道打包
  • .....等

相信你们在平时使用的时候,遇到问题都经过搜索引擎来解决,有些小伙伴可定会想,"做为一个Android开发者,我没有必要去详细的了解Gradle到底去这么使用,平时开发任务原本就比较重,哪里有时间有精力来学习呢" 可是我的以为对Gradle的了解,对于咱们平时开发项目有很重要的帮助。github

Java项目的构建

要知道Gradle是什么以及其做用。咱们须要从整个Java项目的构建提及,看下图: 工具

gradle-java-builds.png

从上图中咱们能够看出在平时Java项目的构建流程,或多或少咱们会涉及如下操做:布局

  • 经过javac命令将一些Java源文件编译为class文件。
  • 将类文件和资源文件(图像和字符串的资源)压缩为Jar包。
  • 经过javadoc命令提取Java源文件的中的注释。生成文档。
  • 运行一些单元测试,或程序验收测试。
  • 将Jar文件部署到资源库中。

既然Java项目的构建会经历以上或更多的步骤,那么咱们接下来看看Android项目的构建流程。单元测试

Android项目的构建

对于Android项目的构建,主要会经历和解决下面这些问题:学习

  • Android对于Java源文件并未按照标准Java字节码编译,但可为Android运行时自定义字节码。
  • Android具备三种资源类型(R.java、Application source code、JavaInterfaces),且按照不一样的方式打包。
  • 还有一个难题就是你定义的资源须要与所包括的资源库中的资源进行聚集,在编译其余任何程序以前,须要知道全部这些资源的识别符。
  • Android应用多数状况下会对应用进行加密。

那么聚集全部的资源以及状况后,整个Android的构建流程看起来是这个样子:测试

Android构建流程图.png

为了方便你们理解这里对其中主要的构建过程进行描述(上图中绿色椭圆部分):gradle

  • aapt:aapt(Android Asset Packaging Tool)工具会打包应用中的资源文件,如AndroidManifest.xml、layout布局中的xml等,并将xml文件编译为二进制形式,固然assets文件夹中的文件不会被编译,图片及raw文件夹中的资源也会保持原来的形态,(须要注意的是raw文件夹中的资源也会生成资源id。AAPT编译完成以后会生成R.java文件)。
  • aidl:AIDL工具会将全部的aidl接口转化为java接口。
  • Java Compiler(Java编译器):当AAPT与AIDL工具将须要处理的数据处理好后,Java 编译器会将全部的java代码,包括R.java与aidl文件编译成.class文件
  • dex:dex工具会将上述产生的.class文件及第三库及其余.class文件编译成.dex文件(dex文件是Dalvik虚拟机能够执行的格式),dex文件最终会被打包进APK文件。
  • apkbuilder:apkbuilder工具会将编译过的资源及未编译过的资源(如图片等)以及.dex文件打包成APK文件。
  • Jarsingner:生成APK文件后,须要对其签名才可安装到设备,平时测试时会使用debug keystore,当正式发布应用时必须使用release版的keystore对应用进行签名。Jarsigner工具会根据相应的keystore生成相应的签名APK文件。
  • zipalign(release mode):zipalign工具,它可以对打包的应用程序进行优化。在你的应用程序上运行zipalign,使得在运行时Android与应用程序间的交互更加有效率。

在Android中,每一个应用程序中储存的数据文件都会被多个进程访问:安装程序会读取应用程序的manifest文件来处理与之相关的权限问题;Home应用程序会读取资源文件来获取应用程序的名和图标;系统服务会由于不少种缘由读取资源(例如,显示应用程序的Notification)。此外,就是应用程序自身用到的资源文件。 在Android中,当资源文件经过内存映射对齐到4字节边界时,访问资源文件的代码才是有效率的。可是,若是资源自己没有进行对齐处理(未使用zipalign工具),它就必须回到老路上,显式地读取它们——这个过程将会比较缓慢且会花费额外的内存。优化

从整个Android项目的构建来看,咱们会感叹“为啥我就简单的建立一个应用,为毛有很是多的事情须要作。”,因此为了方便处理这些,咱们都会想是否是能够写一个能自动处理这些过程的程序化脚本呢?因此Gradle出现了!!!!

为毛选择Gradle?

对于之前传统的项目构建工具,只是编译和打包源代码。而如今项目的构建须要负责更多的工做,它们会运行测试、从多个来源购买编码资源、生成文档、建立多个构建变种、发布应用程序和管理依赖性。而Gradle不只具有这些能力与功能,还解决了Android开发人员面临的一些最棘手的问题,以下所示:

  • 如何自动构建和测试应用,以快速实现生产力?
  • 如何管理依赖和变种。使专业开发人员只须要单击一次就能提取出其应用的数十个变种?
  • 如何构建处理及处理很是大的应用?
  • ...

哎呀说这么多,其实最大的缘由是Google爸爸已经选择Gradle作为Android Studio的构建系统,在Android Studio中将Android应用的整个流程指派给了Gradle。当咱们点击运行按钮时,Android studio会在运行过程当中设置Gradle,并在后台监控。经过学习有关Gradle知识。咱们能够扩展此默认行为。以构建能力更强且通过适当测试的应用。

既然Gradle大法这么好,为毛咱们不去学习呢?

总结

Gradle是项目的构建工具,解决了咱们平时开发中,项目测试、项目打包、项目依赖等问题。

最后

Gradle系列会继续写。若是你们喜欢个人写做风格的话。欢迎你们点赞。

最后,附上我写的一个基于Kotlin 仿开眼的项目SimpleEyes(ps: 其实在我以前,已经有不少小朋友开始仿这款应用了,可是我以为要作就作好。因此个人项目和其余的人应该不一样,不只仅是简单的一个应用。可是,可是。可是。重要的话说三遍。还在开发阶段,不要打我),欢迎你们follow和start

相关文章
相关标签/搜索