Android教程2020 - 系列总览

本文链接

前面我们已经新建了一个Android应用工程。可以看到有好几个gradle文件。本文来简要介绍工程中的gradle文件。

本文将会介绍如下3个gradle文件

1
2
3
4
5
Toturial2020
├── build.gradle
├── settings.gradle
└── app
└── build.gradle

项目配置文件 settings.gradle

对于Toturial2020项目来说,settings.gradle内容如下

1
include ':app'

这里面的:app就是我们正在用的App模块。看到这里朋友也能明白了,一个工程中可以有多个模块。
如果项目中有多个模块,settings.gradle内容如下

1
include ':app', ':FisherView', 'uijoystick'

上面是另一个工程settings.gradle文件。
可以看到里面有3个模块。

最外层的构建文件

这里指的是与settings.gradle同目录的build.gradle文件。我们也可以叫它“项目gradle文件”。
这个文件能对工程中所有的模块进行配置。

Toturial2020的项目gradle文件目前是这样的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
google()
jcenter()

}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.2'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
google()
jcenter()
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

里面指明了远程仓库有google何jcenter。
并且它包含一个清除任务(task)clean,实际上执行任务会把build目录删除掉。

未来我们要用到一些第三方库的时候,可能会修改这个文件,添加一些配置进去。具体修改要看第三方库的要求。
比如aboutView项目的gradle文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.2'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

里面用到了一个插件gradle-bintray-plugin,这个是之前用来上传模块用的。

app的gradle

app的gradle指的是app/build.gradle文件。这个文件配置了app模块用到的东西。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
apply plugin: 'com.android.application'

android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.rustfisher.tutorial2020"
minSdkVersion 19
targetSdkVersion 29
versionCode 1
versionName "1.0.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

implementation 'androidx.recyclerview:recyclerview:1.1.0'
}

第一行apply plugin应用了Android应用插件。
Android插件由Google团队开发维护。该插件提供构建,测试,打包应用和模块需要的所有的task。

compileSdkVersion和buildToolsVersion都指定为29。查看as的SDK Manager可以管理SDK具体版本。
对于我们的小工程来说,buildToolsVersion尽可能跟上Google发布的最新版本。

下面是android配置区域。

defaultConfig

defaultConfig区域对app核心进行配置,会覆盖AndroidManifest.xml中的配置。

applicationId指定了app的应用ID。一般来说这个字符串和AndroidManifest.xml中的package一致。
它们也可以不一致,系统会以gradle的applicationId为准。

minSdkVersion指的是支持到的最老最旧的Android API版本。19对应的是KitKat。
targetSdkVersion指的是当前的目标SDK版本。

versionCode是版本号。大的版本号可以覆盖小的版本号。
versionName是版本名。它是一个字符串,系统并不会根据它来判断版本的新旧。

testInstrumentationRunner指定的是单元测试的运行器。

buildTypes

编译配置区域。
可以看到默认会有一个release区块。它配置的是发布(release)版本。

minifyEnabled 表示打包时会启用优化功能。具体使用的是ProGuard的混淆和优化功能。
优化功能需要proguardFiles的配合。它指定了混淆的配置信息。
一般来说发布版我们会启用minifyEnabled。开发版则不启用这个功能。

这里能配置多种多样的定制打包信息。多渠道打包大都在这里进行配置。

dependencies

app模块使用到的库,或者说是“依赖”。

implementation后面指定库的名称和版本。

1
implementation 'androidx.appcompat:appcompat:1.1.0'

使用版本是1.1.0

用到第三方库的时候,一般会有声明,教使用者如何引入这个库。

参考:
Gradle for Android 开始
Gradle 基础自定义构建
Gradle 构建多种版本