你真的了解Gradle吗?

2824145-6fb4a4059228244a.png
gradle.png

题外话:其实本来不想取这个名字的,但是感觉不取这个名字感觉没有几个人看啊。大家肯定觉得这个名字比较高大上吧!哈哈哈哈。好了,收。

前言

在平时Android开发中我们常常使用Gradle来构建我们的项目,我相信大家都可能遇到以下问题:

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

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

官方介绍

要知道Gradle是什么,需要了解一些重要概念,先来官方介绍:

Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy的一门DSL,build脚本使用Groovy编写

看了官方介绍,我相信很多小伙伴和我一样。“md,看不懂!,说了那么多,我还是不知道。“ 那接下来我们就来看看Gradle到底是什么鬼。既然在官方介绍中。讲了Gradle是一种构建工具、那它到底是构建什么呢?解决什么问题呢?什么又是DSL呢?

构建工具到底解决了什么问题?

构建工具到底解决了什么问题,我们直接通过在Android下Gradle的使用来分析。请看下图:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.yzkj.yzapp"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    }
    buildTypes {
        release { 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
   
}

dependencies { 
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'
    
}

上图是我们平时Android开发目录下Module对应的build.gradle文件,相应大家也发现了,我们在平时开发中,我们主要用到了一下功能。

依赖管理

在平时开发中,我们如果需要依赖第三方库,我们只需要在相应Module下的build.gradle文件,添加一句“compile 'xxxxx.xxxx.xxx'。Gradle就会自动帮我们去下载相应的第三方库。并形成依赖关系。

试想在没有自动化构建工具之前,我们的依赖管理,需要放在Lib目录中。这样Lib目录中就充斥着大量的三方jar包,很不利于管理,同时很容易出现jar包,版本冲突的问题。

测试

在没有自动化测试工具之前,我们的测试代码只是写简单的类包含Main方法进行简单的测试操作。

在使用了构建工具后,我们依赖相应测试框架,对我们的项目进行单元测试,功能测试等。

打包

通常我们将我们的程序打包,Android Studio 的build tools 进行打包(需要签名文件的位置,及签名的密码)。试想在平时开发中,肯定会有正式环境与测试环境,如果这个时候测试需要一个测试包。你就要去修改请求地址。并且重复打包这个流程。
这样操作难道不是很繁琐?

在使用了构建工具后。我们可以直接通过构建工具,直接进行测试版与正式版的打包。通过构建工具来直接进行不同渠道与不同版本的打包,难道不爽?

以上几点,都是在我们开发中。经常会遇到并且操作的事情。这个时候大家肯定都会想,这些重复低效的劳动为什么不通过程序来帮我们解决呢。所以理所应当的出现了一系列的项目构建工具。

各种构建工具的比较

Ant

Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。

Maven

Maven 在Ant的基础上、添加了依赖管理与发布,基于xml标记语言进行解析。

Gradle

Gradle 在Maven 的基础上。使用groovy语言来构建脚本。比Maven更快捷。且更灵活。

通过上述,构建工具是阶段性的发展,到了Gradle的时候。项目构建工具已经发展的很成熟了。这里如果大家对Gradle与Maven的区别感兴趣的话。可以参见官方介绍。传送门

DSL(Domain-specific language)是什么

之所以要把DSl放到这个地方来讲,个人觉得,当我们知道了项目构建工具到底要做什么的时候,在来了解DSL这个专业术语,大家要好理解一点。

DSL维基百科

is a computer language specialized to a particular application domain. This is in contrast to a general-purpose language (GPL), which is broadly applicable across domains. There is a wide variety of DSLs, ranging from widely used languages for common domains, such as HTML for web pages, down to languages used by only one or a few pieces of software, such as Emacs Lisp for GNU Emacs and XEmacs. DSLs can be further subdivided by the kind of language, and include domain-specific markup languages, domain-specific modeling languages (more generally, specification languages), and domain-specific programming languages. Special-purpose computer languages have always existed in the computer age, but the term "domain-specific language" has become more popular due to the rise of domain-specific modeling. Simpler DSLs, particularly ones used by a single application, are sometimes informally called mini-languages.

翻译如下:是一家专门为特定的应用程序域中的计算机语言。这是一个通用的语言(GPL),这是广泛适用的跨域。有各种各样的DSL,从广泛的语言共同的领域,如Web页面的HTML,到只由一个或几个软件使用的语言,如Emacs Lisp GNU Emacs和XEmacs。DSL可以进一步细分的那种语言,包括特定领域的标记语言,特定领域的建模语言(更一般的,规范的语言),以及特定领域的编程语言。特殊用途的计算机语言一直在计算机时代的存在,但“领域特定语言”已经成为比较流行的针对特定领域建模的崛起。简单的DSL,特别是那些由单个应用程序使用,有时非正式地称为小语种。

简单理解来说DSl就是为了解决特定领域的一门语言。那相对于Gradle来说。Gradle是为了解决项目构建问题出现而出现的。其主要解决问题就是项目的自动化构建。

总结

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

后话

Gradle系列会继续写。如果大家喜欢我的写作风格的话。欢迎大家点赞。

最后,附上我写的一个基于Kotlin 仿开眼的项目SimpleEyes(ps: 其实在我之前,已经有很多小朋友开始仿这款应用了,但是我觉得要做就做好。所以我的项目和其他的人应该不同,不仅仅是简单的一个应用。但是,但是。但是。重要的话说三遍。还在开发阶段,不要打我),欢迎大家follow和start

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值