安卓开发学习笔记(2):Gradle

来源:互联网 发布:宝马中国 知乎 编辑:程序博客网 时间:2024/05/22 14:26

Gradle 是新一代的自动化构建工具,它是一个独立的项目,跟AS无关。

为了支持 Gradle 能在 AS 上使用,Google 做了个 AS 的插件叫 Android Gradle Plugin ,所以我们能在 AS 上使用 Gradle 完全是因为这个插件的原因。在项目的根目录有个 build.gradle 文件,里面有这么一句代码:

classpath 'com.android.tools.build:gradle:2.1.2'

这个就是依赖 gradle 插件的代码,后面的版本号代表的是 android gradle plugin 的版本,而不是 Gradle 的版本,这个是 Google 定的,跟 Gradle 官方没关系

Android 项目包含的 Gradle 配置文件

这里姑且以我很早在 GitHub 开源的 9GAG 项目为例,来稍微介绍下一个完整的 Android 项目包含的基本 Gradle 相关的配置文件:

图片描述

红色标记部分从上到下咱们来一步步分析:

  • 9GAG/app/build.gradle

这个文件是 app 文件夹下这个 Module 的 gradle 配置文件,也可以算是整个项目最主要的 gradle 配置文件,具体里面的配置以后再介绍。

  • 9GAG/extras/ShimmerAndroid/build.gradle

每一个 Module 都需要有一个 gradle 配置文件,语法都是一样,唯一不同的是开头声明的是

apply plugin: ‘com.android.library’
  • 9GAG/gradle

这个目录下有个 wrapper 文件夹,里面可以看到有两个文件,我们主要看下 gradle-wrapper.properties 这个文件的内容:

图片描述

可以看到里面声明了 gradle 的目录与下载路径以及当前项目使用的 gradle 版本,这些默认的路径我们一般不会更改的,这个文件里指明的 gradle 版本不对也是很多导包不成功的原因之一。

  • 9GAG/build.gradle

这个文件是整个项目的 gradle 基础配置文件,默认的内容就是声明了 android gradle plugin 的版本。

  • 9GAG/settings.gradle

这个文件是全局的项目配置文件,里面主要声明一些需要加入 gradle 的 module,我们来看看 9GAG 该文件的内容:

图片描述


如何正确导入下载的开源项目?

我们经常会在 GitHub 发现一些优秀的开源项目,然后想要下载学习,然而第一步一般都是把源码导入到 AS 里,然后运行起来看下效果,但是经常会运行失败,这里我来给大家说下导入开源项目的正确姿势:

下载一个Demo,先打开每个 module下的 gradle 文件,即 app 目录下的 build.gradle 以及各个 library 下的 build.gradle ,首先查看 compileSdkVersion 和 buildToolsVersion,因为有些时候你本地的版本和下载的版本不一致,那么就会导致失败。

然后就是检查 gradle-wrapper ,Google 有些时候要求不同的 AS 支持不同的 gradle 版本。比如 AS 1.0 的时候要求必须使用 gradle 1.x 的版本,等到 AS 2.0 的时候,Google 不支持 gradle1.x 的版本,这个时候你必须手动更新下 android gradle plugin 的版本,然后重新同步下。

检查以上两个地方基本就可以导入并运行了,如果还有其他问题,那可能就是环境或者项目本身的问题了。

认识下几个命令

上面提到了,假设我们没有 IDE ,只有类似 Sublime、Atom、Vim这种轻量编辑器怎么办?那我们就没法开发 Android 了么?然而只要有构建工具,不需要 IDE 我们一样有办法开发,这个时候我们就需要用到几个有用的 Gradle 命令了:

  • ./gradlew -v 版本号

  • ./gradlew clean 清除9GAG/app目录下的build文件夹

  • ./gradlew build 检查依赖并编译打包

这里注意的是 ./gradlew build 命令把 debug、release 环境的包都打出来,如果正式发布只需要打 Release 的包,该怎么办呢,下面介绍一个很有用的命令 assemble , 如

  • ./gradlew assembleDebug 编译并打Debug包

  • ./gradlew assembleRelease 编译并打Release的包

值得注意的是,以上所有命令都是在终端里执行,并且必须要切换到所在项目的根目录下执行,win系统直接执行 gradlew 。


创建一个项目,包含了三个相关的gradle配置文件,分别是根目录下的 build.gradle、settings.gradle 和 app 目录下的 build.gradle 文件。在 app 目录会生成一个 build.gradle 文件,app 目录基本是项目的一个主要目录了,所有的功能开发都是在这个目录下,自然该目录下的 build.gradle 也是整个项目最重要的配置文件,这个文件对全新的项目来说会包含三部分:

1.最顶部的apply plugin 声明

2.android {} 节点

3.dependencies {} 节点

apply plugin 声明

最顶部有一行代码是这样的:

apply plugin: 'com.android.application'    

代表该项目是一个 Android 项目,而且一个 Android 项目只有一句这个声明,别问为什么这样写,这是规范。

如果你的项目有引用一些 module ,你可以理解成通过源码的方式引用一些 android library ,那么你的 module 开头需要声明是一个 android library ,那需要这样写:

apply plugin: 'com.android.library'    

dependencies 节点

我们先来看下 dependencies 节点,dependencies 是 denpendency 的复数,意为依赖的意思,所以这里就是用来管理依赖的地方。这里以我的开源项目 9GAG 为例,依赖一般有三种:

图片描述

我们知道我们可以在 AS 中直接依赖 jar 文件,靠的就是这行代码 compile fileTree(dir: ‘libs’, include: [‘*.jar’]) ,意思是编译 libs 目录下的所有 jar 包,当然你可以更改这个目录。

第二种就比较常见了,现在大家都已经很熟悉了,就是直接依赖远程项目名字 + 版本号,至于该项目是放在哪里的呢?一般是放在 jcenter 和 maven 仓库的,这个可以在项目根目录下的 build.gradle 指定远程仓库地址,甚至可以在本地搭建一个私有仓库,然后指定本地仓库地址。

第三种就是类似原始的引用 android library 的方式,一般是你们公司内部的项目,或者改第三方库的源码,同时本地又没有搭建私有仓库,才会选择这种方式。这种方式目前很不推荐了,大部分情况第二种方式完全足够了,但是大家知道这也是一种依赖方式。

android 节点

以上两个节点都相对简单点,这个节点是跟项目配置紧密相关的,简单有简单的配置方法,复杂也有复杂的配置方法,这里我先列举一些项目常用的配置,并且加上了注释方便大家理解:

图片描述

这部分应该比较简单,没有不理解的吧?就不过多解释了。

图片描述

buildTypes 意为编译类型,这里声明了 debug 和 release 两种类型,当然你也可以声明其他类型,名字随意取,可以看到 debug 和 release 两种类型签名所用的配置不一样,这个配置具体详细也就是在上部分 signingConfigs 节点指定的,那里面的一些密码信息是在你生成 keystore 文件时设置的。

这里配置完成之后就可以通过上篇文章提到的的命令 gradlew assembleDebug 或者 gradlew assembleRelease 进行打包了,这里估计有同学会问这个命令跟 buildTypes 有没有什么关系呢?聪明,是有关系的,这里用到的其实就是 assemble 命令,而 assemble + buildTypes 会生成一个 task ,所以 gradlew assembleDebug 和 gradlew assembleRelease 都是属于拼接的一个 task ,如果你 buildTypes 定义了一个 abc 的类型,那你就会有一个 gradlew assembleAbc 的 task 可以执行

总结:

当然 Gradle 的配置不止以上介绍的,还有其他配置,如忽略 Lint 的检查报错,打包的时候忽略一些文件、指定 Java 版本等:

图片描述

这些问题不必太在意,一般你在编译或者打包出错的时候 gradle 会提示你什么错误的,按照提示进行修改就行了



原文链接



0 0
原创粉丝点击