搞懂 AndroidStudio 中的 build.gradle 文件内容

此文章未完待续

对 Android Studio 中的 build.gradle 一直是中模棱两可的状态,只是简单的知道怎么用,怎么改,有时候报错了也只是 search 一下把网上的代码弄过来,问题解决了就 ok 了.

但是心里一直有个这个坎儿,终于抽时间来彻底弄懂 build.gradle 文件中的代码是什么意思了.

开始吧

1.build.gradle文件的分类

我们在建立一个新项目的时候,会发现整个的 project 中会存在两个 build.gradle 文件.

上一张图看看吧

如上图所示

其中的1号文件是属于整个项目的 build.gradle 文件(这里叫它project层 gradle)

2号文件是属于 app 这个 module 的 build.gradle 文件(这里叫它 module 层 gradle)

当然如果你引入了多个 module 的话那么每个 module里面都会存在一个 build.gradle 文件的.

2.project 层的 build.gradle 文件

同样上一张结构图吧,然后再分析

如图所示可以看到这个文件总共分为3个部分,我们一个一个的看吧

buildscript{} :

一起看看 google 的解释


The buildscript {} block is where you configure the repositories and dependencies for Gradle itself–meaning, you should not include dependencies for your modules here. For example, this block includes the Android plugin for Gradle as a dependency because it provides the additional instructions Gradle needs to build Android app modules.

意思就是:这个代码块是负责配置Gradle 自身的依赖和配置依赖所需要查找的库的代码块.

因此不能在此配置任何关于 module 的依赖项

dependencies 里面会配置我们用到的插件,如默认存在的 gradle 可以用来自动化构建项目.还可以手动配置如 apt…

repositories 里面指定了dependencies 中插件所存在的位置,如jcenter(),Maven()…

allprojects{}

代码块这个里面比较简单,就不上图了,结构上跟 buildscript中的 repositories 是一样的.

同理,allprojects 中的 repositories 也是为某某提供的库的位置的.

那么这个某某是谁呢,看 allprojects 我们就知道了,没错就是我们的 project 中所有的 moudle 中的依赖的开源项目.

其实说了这么多,总结起来就一张图就行

task clean(type: Delete){}

解释这个之前,我们先看一个例子就明白了.

看图说话

再看看version.gradle 文件

先看目录,我新建了一个 version.gradle,并且通过apply from: 'version.gradle'引入到了 project 层的 build.gradle

这个有什么用呢,我们可以用这个单独的 gradle 文件来统一管理我们的第三方依赖的版本号.

接下来我们再看 这个文件的最底部

task printStringCml{
    println "cmlVersionCode${versionCode}"
}

这段代码.其实就是一个 task 我们可以在命令行执行它

接下来看看 Terminal 中我执行了这段代码

可以看到在下面打印的结果.

好了,看完了上面的例子我们再看task clean() 就知道了,这只是一个 task 任务而已,功能就是将 android 生成的 build 文件删除而已,不用深究.

3.module层的 build.gradle

还是先上一张结构图

apply

如图的第一行
从字面上理解就是申请一个插件

apply plugin: 'com.android.application'的意思就是申请一个 android 插件用来处理 android 项目
同理还可以根据实际情况增加其它的

eg:

1.需要用到 GreenDao 的时候就需要增加apply plugin: 'org.greenrobot.greendao'

2.如果作为一个库文件的话,那么第一行就是apply plugin: 'com.android.library'表示要用到一些关于库方面的插件了.

android{}

初始的 anroid{} 代码块是两个部分

第一部分就看图中的注释即可,也是比较简单易懂的

dependencies{}
关于这个代码块其实就是本 module所有的依赖存放的位置,关键是要搞懂几个关键字即可.

new old explain
implementation compile implementation指令不会传递,也就是当前引用的第三方库仅限于本 moudle 使用,其他的 moudle 需要重新添加依赖才能用
api compile 基本没什么区别只是换了个名字而已
compileOnly provided aaa
runtimeOnly apk aaa