博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gradle、Maven、Ant的介绍
阅读量:5962 次
发布时间:2019-06-19

本文共 4326 字,大约阅读时间需要 14 分钟。

版权声明:本文为sydMobile原创文章,转载请务必注明出处! https://blog.csdn.net/sydMobile/article/details/78458704

文章最早发布于我的微信公众号 Android_De_Home 中,欢迎大家扫描下面二维码关注微信公众获取更多知识内容。

本文为sydMobile原创文章,可以随意转载,但请务必注明出处!

Apache Ant

Apache Ant 是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。默认情况下,它的buildfile(xml文件)名为build.xml,每一个buildfile含有一个<project>和至少一个预设的<target>,这些targets包含许多task elements。每个task element有一个用来被参考的id,此id必须是唯一的。

build.xml范例

Apache Maven

Apache Maven:是一个软件(特别是Java软件)项目管理以及自动构建工具,由Apache软件基金会所提供。是基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

Maven也可以被利用与构建和管理各种项目,例如:C#、Ruby、Scala和其他语言编写的项目。Maven曾经是Jakarta项目的子项目,现在已经成为Apache软件基金会主持的独立Apache项目了。
Maven项目使用项目对象模型(Project Object Modle,POM)来配置项目,对象模型存储在名为pom.xm的文件中。
简单示例:

4.0.0
com.mycompany.app
my-app
1.0
junit
junit
3.8.1
test

Gradle

Gradle 是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy语言的特定领域语言(DSL语言,所谓的DSL是指这个语言应用在特定的领域,而类似Java这样是DCL语言,可以运用在普通的各个领域)来声明的项目设置,而不是传统的xml语言,当前支持的语言仅限于Java、Groovy、Scala、Kotlin。计划未来支持更多的语言。支持maven、lvy仓库。

过去Java开发者们常用Maven和Ant等工具进行封装部署的自动化,或者两者兼用,不过这两个工具彼此有优缺点,如果频繁改变相依赖包的版本,使用Ant相当麻烦,如果琐碎工作很多,Maven功能不足,而且两者都是使用xm描述的,相当不利于设计if、switch等判断式,即使写了可读性也不佳,Gradle改良了过去Maven、Ant带给开发者的问题,也已经成为Android Studio内置封装部署工具,比如添加项目依赖,发布版本,混淆配置等等。
优点:

  1. 自动处理包相依赖关系—取自maven repos的概念
  2. 自动处理部署问题–取自Ant的概念
  3. 条件判断写法直觉–使用Groovy语言

Android Studio中gradle配置文件的介绍:

//声明是Android程序apply plugin: 'com.android.application'//关于Android项目的一些配置android {    compileSdkVersion 24 // 编译版本号(android.jar)    buildToolsVersion '24.0.0' // build tools的版本号    //对lint的配置,lint可以用来检查代码    lintOptions {        // 打包的时候省去不用的资源        disable "ResourceType"        checkReleaseBuilds false        // 关闭        abortOnError false    }    // 一些默认的配置    defaultConfig {        applicationId "com.syd.demo"        minSdkVersion 16        targetSdkVersion 22        versionCode 301        versionName "3.0.1"        multiDexEnabled true        ndk {            //选择要添加的对应cpu类型的.so库。            abiFilters 'armeabi', 'armeabi-v7a', 'armeabi-v8a'            // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'        }    }    // 对一些构建的配置    buildTypes {        // 对打包发布的一些配置        release {            // 是否进行混淆            minifyEnabled false            // 混淆文件的位置            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }    // 签名配置,配置上之后再运行或者debug的时候就会使用你的签名打成包了而不是默认的    signingConfigs {        debug {            //签名文件的位置(直接和本文件放在一层就好了)            storeFile file('xxx.keystore')            storePassword "xxxx"            keyAlias "xxxx.keystore"            keyPassword "xxx"        }    }}// 项目的一些依赖库的添加dependencies {    // 编译libs目录下的所以jar包    compile fileTree(include: ['*.jar'], dir: 'libs')    compile files('libs/universal-image-loader-1.9.5.jar')    //添加maven仓库里面的依赖    compile 'com.xxx.xx.xx'    //项目模块依赖 里面的项目路径是相对于本文件的    compile project(':项目名字’)}// 对依赖的仓库的声明repositories {    // 可以理解为一个在网络上的存放依赖包的仓库,在这里声明后,你才可以直接在上面添加这个仓库里面的依赖包,android studio默认的是jcenter仓库里面的    mavenCentral()}

proguardFiles这部分有两段,前一段代表系统默认的android程序的混淆文件,该文件已将包含了基本的混淆声明,免去了我们很多的事情,这个文件的目录在你的sdk目录中的tools/proguard/proguard-android.txt 后面的一部分是我们项目里面自己定义的混淆文件,目录就是 app/proguard-rules.txt如果你使用的是Android Studio的话,创建的新的项目的时候默认生成的文件名是 proguard-rules.pro 在这里你可以声明一些第三方依赖的混淆规则,最终混淆的结果是这两个部分所共同决定了,关于混淆的知识在以后的文章里面会发布。

每一个module都需要一个Gradle配置文件,语法都是一样的,唯一不同的就是开头的声明,项目的开头声明是apply plugin:’com.android.application’ 而作为类库依赖的开头是:apply plugin:’com.android.library’

项目目录下的gradle是整个项目的gradle基础配置文件,里面主要包含了:声明依赖和插件的仓库的来源

buildscript {    repositories {        jcenter()//这是构建插件所使用的远程库,后需会有一篇介绍库的含义    }    dependencies {        classpath 'com.android.tools.build:gradle:2.0.0-alpha1'//这是项目所使用的 Android gradle 版本    }}allprojects {    repositories {        jcenter()//这是使用远程库依赖的时候,的远程库    }}

参考:

维基百科

关于远程依赖库的知识后面的文章会讲到,你也可以关注我的微信号,更快的获取更新!

 

AndroidInterviewQuestions

关注微信公众号,及时获取内容更新

你可能感兴趣的文章
Computer Science Theory for the Information Age-4: 一些机器学习算法的简介
查看>>
socketserver模块使用方法
查看>>
json模块
查看>>
各型号英特尔CUP的功率
查看>>
scanf()中的%c 不能正常输入的问题
查看>>
常见排序算法及对应的时间复杂度和空间复杂度
查看>>
业界 | 在德州叫一辆自动驾驶车,Drive.ai安排了7辆无人车展开真实试验
查看>>
实时数据平台设计:解决从OLTP到OLAP实时流转缺失
查看>>
三家公司在SD-WAN方面的新动作
查看>>
C#在PDF中如何以不同颜色高亮文本
查看>>
在同一页面显示多个JavaScript统计图表
查看>>
Mac电脑Tomcat下载及安装(详细)MAC在Eclipse里配置tomcat
查看>>
多线程之-----------定时器
查看>>
C#语法——反射,架构师的入门基础。
查看>>
Beego Models 之 一
查看>>
代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能
查看>>
Kubernetes部署的最佳安全实践
查看>>
理解C语言——从小菜到大神的晋级之路(8)——数组、指针和字符串
查看>>
Windows Shellcode学习笔记——shellcode在栈溢出中的利用与优化
查看>>
关于多线程中使用SendMessage
查看>>