Gradle详解(一)

一.Gradle是什么

1.Gradle就是一种构建工具,能实现项目自动化,APK的构建过程如下:

1. 通过AAPT(Android Asset Packaging Tool)打包res资源文件,比如AndroidManifest.xml、xml布局文件等,并将这些xml文件编译为二进制,其中assets和raw文件夹的文件不会被编译为二进制,最终会生成R.java和resources.arsc文件。 
2. AIDL工具会将所有的aidl接口转化为对应的Java接口。 
3. 所有的Java代码,包括R.java和Java接口都会被Java编译器编译成.class文件。 
4. Dex工具会将上一步生成的.class文件、第三库和其他.class文件编译成.dex文件。 
5. 上一步编译生成的.dex文件、编译过的资源、无需编译的资源(如图片等)会被ApkBuilder工具打包成APK文件。 
6. 使用Debug Keystore或者Release Keystore对上一步生成的APK文件进行签名。 
7. 如果是对APK正式签名,还需要使用zipalign工具对APK进行对齐操作,这样应用运行时会减少内存的开销。

二.构建工具介绍

1.Apache Ant

Ant在这里不是蚂蚁的意思(虽然它的图标是蚂蚁),而是Another Neat Tool的意思。 
它是由 James Duncan Davidson 开发的(Tomcat 最初的开发者),最初是用来构建 Tomcat。在2000年,Ant成为一个独立的项目并被发布出来。Ant 是由 Java 编写的构建工具,它的核心代码是由Java编写的,因此具有平台无关性,构建脚本是XML格式的(默认为bulid.xml),如果你熟悉XML,那么Ant 就比较容易上手。

Ant构建脚本的样式如下所示。 
 

<?xml version="1.0" encoding="UTF-8"?>
<project name="test" default="hello">
    <echo message="running build.xml which is equivalent to build.gant"/>
    <property file="build.properties"/>    
    <target name="init"  description="init target" > 
        <echo message="Executing init target"/>
    </target> 
    <target name="hello" depends="init" description="say hello target"> 
        <echo message="${echo.msg}"/>
    </target>
</project>

Ant的构建脚本由三个基本元素组成:一个project(工程)、多个target(目标)和可用的task(任务)。 
Apache Ant有以下缺点: 
1. Ant无法获取运行时的信息。 
2. XML作为构建脚本的语言,如果构建逻辑复杂,那么构建脚本就会又长又难以维护。 
3. Ant需要配合Ivy(一种管理项目依赖工具),否则Ant很难管理依赖。 
4. Ant在如何组织项目结构方面没有给出任何指导,这导致Ant虽然灵活性高,但这样的灵活导致每个构建脚本都是唯一的而且很难被理解。

2.Gant

Gant 是一个基于Ant 的构建工具,它在Ant的基础上用Groovy写的DSL(领域特定语言)。如果用Ant 实现构建,但是不喜欢用XML来编写构建脚本或者现有的XML构建脚本很难维护和管理,那么Gant 是一个不错的选择。 
Gant构建文件的样式如下所示。 

Ant.echo(message : 'running build.gant')
Ant.property(file : 'build.properties')
def antProperty = Ant.project.properties
target(init : 'init target') {
    echo(message : 'Executing init target')
}
target(hello : 'say hello target') {
    depends(init)
    echo(message : antProperty.'echo.msg')
}
setDefaultTarget(hello

这个build.gant等同于此前Ant的bulid.xml。

3.Apache Maven

Maven于2004年发布,它的目标是改进开发人员在使用Ant时面临的一些问题。Maven最初是为了简化Jakarta Turbine项目的构建,它经历了Maven到Maven3的发展,Maven作为后来者, 继承了Ant的项目构建功能, 同样采用了XML作为构建脚本的格式。Maven具有依赖管理和项目管理的功能,提供了中央仓库,能帮助我们自动下载库文件。 
Maven的构建脚本的样式如下所示。 
 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>Maven Quick Start Archetype</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Maven相比Ant的优点: 
1. Ant是过程式的,开发者需要显示的指定每个目标,以及完成该目标锁需要执行的任务。每一个项目,开发着都需要重新编写这一过程,这样会产生大量的重复。Maven是声明式的,项目的构建过程和过程中的各个阶段都由插件实现,开发者只需要声明项目的基本元素就可以了,这很大程度消除了重复。 
2. Ant本身是没有依赖管理,需要配合Ivy来管理依赖,而Maven本身就提供了依赖管理。 
3. Maven 使用约定而不是配置,它为工程提供了合理的默认行为,项目会知道去哪个目录寻找源代码以及构建运行时有那些任务去执行,如果你的项目遵从默认值,那么只需要写几行XML配置脚本就可以了。而Ant是使用配置且没有默认行为的。

Maven的缺点: 
1. Maven的提供了默认的结构和生命周期,这些可能不适合你的项目需求。 
2. 为Maven写定制的扩展过于累赘。 
3. Maven的中央仓库比较混乱,当无法从中央仓库中得到需要的类库时,我们可以手工下载复制到本地仓库中,也可以建立组织内部的仓库服务器。 
4. 国内连接Maven的中央仓库比较慢,需要连接国内的Maven镜像仓库。 
5. Maven缺乏文档,不便于使用和理解。

三.Gradle的特性

Gradle是一款基于JVM的专注于灵活性和性能的开源构建工具。 

从上图可以看出,Gradle结合Ant和Maven等构建工具的最佳特性。它有着约定优于配置的方法、强大的依赖管理,它的构建脚本使用Groovy或Kotlin DSL编写,是Android的官方构建工具。Gradle的构建脚本的样式如下所示。 

apply plugin:'java'
group='com.mycompany.app'
archivesBaseName='my-app'
version='1.0-SNAPSHOT'

repositories{
   mavenCentral()
}

dependencies{
   testCompile 'junit:4.11'
}
=

Ant和Maven的构建脚本是由XML来编写的,如果XML逻辑复杂内容太多就不容易维护。Gradle可以使用Groovy DSL来实现构建脚本,Groovy 是基于Jvm一种动态语言,它的语法和Java非常相似并兼容Java,因此你无需担心学习Groovy的成本。Groovy在Java的基础上增加了很多动态类型和灵活的特性,比起XML,Gradle更具有表达性和可读性。
 

该篇完全转载自:

https://blog.csdn.net/itachi85/article/details/81906139

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值