小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
gradle简介
我们已经新建了一个Android应用工程后,可以看到有好几个gradle文件。本文来简要介绍工程中的gradle文件。
本文将会介绍如下3个gradle文件
Toturial2020
├── build.gradle
├── settings.gradle
└── app
└── build.gradle
项目配置文件 settings.gradle
对于Toturial2020项目来说,settings.gradle
内容如下
include ':app'
这里面的:app
就是我们正在用的App模块。看到这里朋友也能明白了,一个工程中可以有多个模块。
如果项目中有多个模块,settings.gradle
内容如下
include ':app', ':FisherView', 'uijoystick'
上面是另一个工程的settings.gradle
文件。
可以看到里面有3个模块。
最外层的构建文件
这里指的是与settings.gradle
同目录的build.gradle
文件。我们也可以叫它“项目gradle文件”。
这个文件能对工程中所有的模块进行配置。
Toturial2020的项目gradle文件目前是这样的。
// 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文件。
// 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模块用到的东西。
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后面指定库的名称和版本。
implementation 'androidx.appcompat:appcompat:1.1.0'
使用版本是1.1.0
。
用到第三方库的时候,一般会有声明,教使用者如何引入这个库。