重温Android(2)之理解build.gradle

Android Studio 使用 Gradle 构建项目。Gradle 是一种自动的项目构建工具。
Android项目有2个 build.gradle 文件,分别是在最外层目录下和在APP目录下,如图。

build.gradle文件位置

最外层的build.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 { //声明使用 Gradle 构建Android项目,所必要的Gradle插件
classpath 'com.android.tools.build:gradle:3.2.1'

// 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) { //运行gradle clean时,执行此处定义的task
delete rootProject.buildDir
}

说明: 添加一些全局的项目构建配置时需要修改此文件。

app文件夹下的 build.grade

代码如下。

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
32
33
34
//应用程序模块/库模块选择
apply plugin: 'com.android.application' //应用程序模块

android {
compileSdkVersion 28 //项目编译版本
defaultConfig { //项目配置
applicationId "com.example.wx.myapplication" //包名
minSdkVersion 15 //最低兼容版本
targetSdkVersion 28 //目标版本
versionCode 1 //版本号
versionName "1.0" //版本名
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" //测试相关
}
packagingOptions { //打包选项
exclude 'META-INF/DEPENDENCIES'
}
buildTypes { //生成安装文件配置
release { // 正式版文件, or debug 测试版文件
minifyEnabled false //混淆选项
proguardFiles getDefaultProguardFile('proguard-android.txt'), //混淆规则选择,全局规则,置于SDK目录下
'proguard-rules.pro' //项目规则,置于当前项目根目录下
//
}
}
}

dependencies { //指定当前项目所有的依赖关系
implementation fileTree(include: ['*.jar'], dir: 'libs') //本地依赖声明
implementation 'com.android.support:appcompat-v7:28.0.0' //远程依赖声明
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12' //测试用例库声明
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

说明

  • 应用程序模块可以直接运行,库模块只能作为代码库依附于别的应用程序来运行
  • 通过 Android Studio 直接运行项目生成的都是测试版安装文件
  • 通常项目有3中依赖方式:本地依赖、库依赖、远程依赖
  • 在 Android Studio 的3.0.0版本之后,compile依赖关系被弃用,取而代之的是implementationapi
    • implementation :该依赖隐藏在内部,而不对外部公开
    • api :使用该方式依赖的库将会参与编译和打包, 跟 2.x 版本的 compile 完全相同
      例子:有app模块的组成如下图,已知LibraryA 中引用了 LibraryC 的库,如果对 LibraryC 的依赖用的是 implementation 关键字(如下代码), 那么LibraryC 中的接口,仅仅只能给 LibraryA 使用,而App Module 是无法访问到 LibraryC 提供的接口的。
      某APP模块组成
      1
      2
      3
      4
      dependencies {
      . . . .
      implementation project (path:':libraryC') //库依赖声明
      }