分析Android项目中各个gradle文件,简单Groovy语法、实例
一、每个项目的编译至少有一个build.gradle,每个build.gradle里面包含多个task,一个task里面又可以包含很多action,action是一个代码块,里面包含了需要执行的代码。
二、在编译过程中,Gradle会根据build相关文件,聚合所有project的task,执行task的中的action。因为一个build.gradle中的task非常多,所以里面的task的执行顺序一种叫依赖逻辑来保证,几乎所有的task都需要依赖其他的task来执行。所以最后所有的task会构成一个有向无环图 的数据结构。
三、Gradle的编译过程分为三个阶段:
1、初始化阶段:创建project,每个project会对应有一个build.gradle。
2、配置阶段:创建每个build.gradle中的task任务。
3、执行阶段:gradle根据传入的参数决定如何执行这些task,此时task中action代码将执行。
四、一个android项目,gradle文件结构
1、setting.gardle:
(1)一个项目只有一个setting.gradle文件
(2)setting.gradle文件中,包含:顶层的build.gradle文件(如:’:app’) ; 以及项目中model对应的gradle文件(定义哪些modle应该被加入编译过程中)。
(3)这个文件的代码在编译阶段就会被执行。
2、顶层build.gradle文件:
顶层build.gradle文件将会被应用到项目的所有model中。
它的典型模型如下:
分析一下这个文件:
(1)buildscript:定义来android编译工具的类路径。
(2)repositories:它其中的jcenter()方法是一个著名的Maven仓库。
(3)allprojects:它里面定义的属性会被所有的Model应用到。
3、每个Model里面的app build.gradle
在这里可以自定义每个Model文件
如果这个文件与顶层build.gradle文件中部分定义相同,顶层的build.gradle文件这部分属性将会被覆盖。
典型app的build.gradle文件
对该文件进行分析:
apply plugin:应用了android应用程序的gradle插件,这一步是必须的,因为plugin中提供了android所有task的编译、测试、打包。
android:android的所有特殊配置都在这里。
defaultConfig:程序的默认配置,如果该处与AndroidManifest.xml里面有相同属性时,就以这个为主。
applicationId:当前程序id,在AndroidManifest.xml中也有声明包名,在那里声明的包名有两个作用:
(1)作为程序的唯一标示id,防止一个手机安装两个相同的程序。
(2)作为R资源文件的包名。修改AndroidManifest.xml资源文件的包名,将会导致所有的R资源、id类都要修改。而如果在这里修改包名的话,只会改掉当前程序id,不会改变R资源文件的路径。
buildTypes:定义了编译类型,默认有debug、release版本。
dependencies:gradle的依赖配置。定义了当前Model依赖的其它库。
五、Gradle Wrapper
它的作用:因为Gradle不断的更新,新的版本要向后兼容的时候就应用到它。
六、Gradle:
android studio在执行build,rebuild,clean时,实质都时在一些执行gradletask
Android task 有四种基本的task,android继承它们分别进行了自己的实现:
(1)、assemble:对所有的buildType生成apk。
(2)、clean:移除所有的编译输出文件,比如apk。
(3)、check:执行lint检测编译
(4):build:同时执行assemble和check命令。
命令:./gradle tasks 列出所有task。
七、dependency
1、project下的dependency
使用私有仓库:
使用本地仓库:
2、Model下的dependency
组成:组名:库名:版本号
+表示依赖库始终保持最新状态
八、 Groovy语法
def name = ‘abc’
def get =”b=”abc,$name!” 可引入插件
list取值:
List list = [1,2,3,4]
遍历:
list.each(){
printlnelement
}
map使用:
Mappiz = [mar:10,pep:12]
取值:piz[‘mar’]
九、Task篇
1、新建task,打印helloworld;
在app的build.gradle文件中写入:
task hello{
println‘hello world’
}
然后在terminal命令行中输入:./gradlew hello
2、task中action执行顺序:
B dependsOn A:A执行完后B才执行。
暂时写到这里,后续会更新更好的实例。