分析Android项目中各个gradle文件,简单Groovy语法、实例

来源:互联网 发布:mac usb 以太网转接器 编辑:程序博客网 时间:2024/05/22 06:46

分析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才执行。

 



 

暂时写到这里,后续会更新更好的实例。



0 0
原创粉丝点击