1. Wrapper
看完直接说结论:
结论一:Wrapper与Gralde间是解耦的
Wrapper可以理解为一个Gradle的代理:代理Gradle的安装和调用。
没有Wrapper你照样可以在系统上安装Gradle,但你需要自己去维护和管理Gradle升级等操作。当然这不是重点,重点是你需要维护整套Gradle的环境:比如配置环境变量等,装上并不代表就能用了。还有麻烦的地方,当你把Gradle加入到自己的项目工程中时,你同样要劳神费力的配置一翻。
使用Wrapper后,你可以安心的托管了。比如以后升级,你无需自己去下载,而是直接修改下配置文件,交给Wrapper去打理就好了。Wrapper会维护自己的一套机制,你之前在安装的所有版本的Gradle,Wrapper都会完全无视,即使你要的版本已经被你之前手动安装过了,一旦使用Wrapper后,还是会下载那个版本到它指定的目录中。
之前说过,Wrapper是Gralde的代理,执行Gradle的task时:
对于每一个/gradle <task>指令,都可以使用/gradlew <task>指令去替代。
所以说了这么多,Wrapper到底是什么?
Wrapper其实就是一定文件的集合。包含:一个核心JAR,1个配置文件和2个脚本文件。
配置文件(gradle/wrapper/gradle-wrapper.properties):配置Gradle的下载、解压的路径,下载的地址等信息。
JAR(gradle/wrapper/gradle-wrapper.jar):Wrapper自身的代码,Wrapper能做什么,发挥什么样的作用完全来自这个JAR。
脚本文件(gradlew.bat和gradlew,分别对应两种操作系统):用于执行Gradle的task(注意是调用Gradle的,不是Wrapper的)。操作方式:/gradlew <task>。
如果:删除Windows下某个项目中的gradlew.bat文件,然后执行gradlew指令时,会提示:gradlew 不是内部或外部命令,也不是可运行的程序或批处理文件。 恢复后就正常了。
什么是Gradle distributions?
这个词在开头的三篇文章中经常出现,它表示的很简单:就是Gradle自己的版本/们(注意,还是与Wrapper无关)。
如果使用Wrapper,Gralde distribution就会被下载到gradle/wrapper/gradle-wrapper.properties所配置的路径下,下载完毕后会自动解压。
Gralde distributions下载地址
wrapper.properties里的distributionUrl的值就是具体distribution的下载地址。wrapper/dists目录指的就是distribution的目录。
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
distribution分bin和 all两种版本,all等于bin+src
all包含:
bin
docs
init.d
lib
media
samples
src
bin包含:
bin
init.d
lib
media
lib下面是组成Gralde的各种JAR。
bin下面就2个文件gradle和gradle.bat两个。是不是如Wrapper的gradlew和gradlew.bat似曾相识?
没错,这两个就是分别在两种系统下执行Gradle task的脚本文件~。
结论二:Gradle / Wrapper与Android Studio间是解耦的
经过上面的讲解,基本上可以推出这个结论了。
AS在创建Android工程时会自动创建Wrapper,并且指定Android Plugin for Gradle插件进行支持。
这样的话,我们连 将Wrapper配置到项目工程中的 这个动作都可以省略了。很显然AS这么做是为了给广大开发者节省时间。
当然,你也可以不这么做,正如官方文档所言:
Gradle和Android Plugin for Gradle插件独立于Android Studio运行。这意味着,您可以在Android Studio内、使用计算机上的命令行工具或在未安装Android Studio的计算机(例如持续性集成服务器)上构建Android应用。如果您不使用Android Studio,可以学习如何从命令行构建和运行您的应用(资料3)。无论您是从命令行、在远程计算机上还是使用Android Studio构建项目,构建的输出都相同。
最后,还有一个很小的或者无关紧要的点,在AS根目录下会有一个.gradle的文件夹,当执行任何gradlew,/gradlew <task>指令时就会生成该文件夹(如果没有)。据说是Gradle(不是Wrapper)的编译系统,版本由Wrapper指定。
.gradle文件夹是否似曾相识? 没错,wrapper.properties里的GRADLE_USER_HOME也就是Gralde distributions的path路径,默认就是以.gradle文件夹结尾的(见资料2)。
但这跟上面所说的工程根目录下的.gradle文件夹没有一毛钱关系。
2. 什么是DSL
DSL(Domain Specified Language)领域专用语言:DSL说明。
3. Groovy
Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以使用其他 Java 语言编写的库。
Groovy 是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。
Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行 Java 编程),使用方式基本与使用 Java代码的方式相同,该语言特别适合与Spring的动态语言支持一起使用,设计时充分考虑了Java集成,这使 Groovy 与 Java 代码的互操作很容易。(注意:不是指Groovy替代Java,而是指Groovy和Java很好的结合编程。












网友评论