美文网首页Android我爱编程
你真的了解Gradle吗?

你真的了解Gradle吗?

作者: AndyJennifer | 来源:发表于2018-04-03 17:18 被阅读80次
    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

    相关文章

      网友评论

      本文标题:你真的了解Gradle吗?

      本文链接:https://www.haomeiwen.com/subject/essxhftx.html