Android Studio 中的 Gradle 配置说明(一)

gradle
现在做 Android 开发的,基本上都是在用 AS 打包。相信里面也有不少人对 gradle 的信息不是很清楚,现在记录下,以免遗忘。

先来看一段一般的配置代码:

1
2
3
4
5
6
7
8
9
10
compileSdkVersion 25
buildToolsVersion '25.0.0'

defaultConfig {
applicationId "com.android.demo"
minSdkVersion 14
targetSdkVersion 25
versionCode 1
versionName "1.0"
}

compileSdkVersion

用来编译应用的 Android API 版本

buildToolsVersion

构建工具和编译器使用的版本号

minSdkVersion

用来配置运行应用的最小 API 级别, 低于该 API 版本的系统会提示无法运行该应用

targetSdkVersion

用于通知系统,该应用已经在某特定 Android 版本通过测试,从而操作系统不必启用任何向前兼容的行为。这和我们之前看到的 compileSdkVersion 没有任何关系。

applicationId

该属性覆盖了 manifest 文件中的 packagename。
Gradle 作为默认的 Android 构建系统
之前
packagename 作用

  1. 作为一个应用唯一的标志;
  2. 在 R 资源类中被用作包名;

之后

  1. 使用 applicationId 作为唯一的标志;
  2. 在 R 资源类中继续被用作包名;

这样的好处是什么呢?
假设有这样一个场景,我们要构建一个免费版本和一个付费版本,这两个版本的功能基本类似,区别无非是免费版本的功能受限,付费版本的功能通过购买可以拓展功能。而这两个版本又需要同时在应用市场上线的。

以前的做法怎么做呢?

以前一般会先出免费版本,之后通过修改 packname,再出一个付费版本。有的人可能会说这不是很简单吗?这里的关键点是一旦你修改 packagename 后,所有引用资源的地方,相应的包名称也需要同时修改。这会对代码比较的时候产生极大的不便。

所以 Android 工具团队解耦了即作为唯一标志又作为资源包名这两个功能。这样你构建两个版本的时候,只需要修改 applicationId 就可以,所有的资源的包名都不需要修改。

versionCode

作为应用市场的版本唯一标识码,一般是从 1 开始,后续的版本更新,versionCode 必须大于之前的。
这个对用户一般不可见。
这个会覆盖 manifest 文件中对应的属性。

versionName

版本号。这个一般就是告诉用户我当前的版本号是多少。比如:0.8.0,1.0.1,2.1.11等等。这个对用户是可见的,和 versionCode 没有对应关系。但是一般版本更新的时候 versionName 也会大于之前的。
这个会覆盖 manifest 文件中对应的属性。

今天就先到这里,我们下期再见。