一、区分gradle version与gradle plugin version
参考博客
gradle是一个构建工具,理论上来说,它可以用来构建任何项目(如java项目,ios项目)。它可以与任何类型的IDE集成(如ecllipse,android studio),方便的帮我们将项目代码进行构建打包,是一个脚本工具。
配置gradle version的地方在项目目录下的gradle-wrapper.properties或者在File->Project Structure->project menu里的gradle version
Android Gradle Plugin(简称AGP)是android基于gradle开发,整合了几项专门用于构建Android应用的功能。而该工具命名为:com.android.tools.build:gradle:xxxx 。
配置android gradle version的地方在根build.gradle里或者在File->Project Structure->project menu里的android gradle plugin version
buildscript {
....
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
}
....
}
所以,到这里大家理解两者关系了。两者是不同团队开发的,所以版本不一致。但是因为anroid gradle是依赖于gradle开发的,所以两个之间的对应关系比较重要。
//这个地方是android自己定制化Gradle的插件版本
classpath 'com.android.tools.build:gradle:3.6.4'
//gradle/wrapper/gradle-wrapper.properties 这个是系统独立的Gradle的版本号。
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip
Android Gradle 插件版本 | 所需的 Gradle 版本 |
---|---|
1.0.0 - 1.1.3 | 2.2.1 - 2.3 |
1.2.0 - 1.3.1 | 2.2.1 - 2.9 |
1.5.0 | 2.2.1 - 2.13 |
2.0.0 - 2.1.2 | 2.10 - 2.13 |
2.1.3 - 2.2.3 | 2.14.1 - 3.5 |
2.3.0+ | 3.3+ |
3.0.0+ | 4.1+ |
3.1.0+ | 4.4+ |
3.2.0 - 3.2.1 | 4.6+ |
3.3.0 - 3.3.3 | 4.10.1+ |
3.4.0 - 3.4.3 | 5.1.1+ |
3.5.0 - 3.5.4 | 5.4.1+ |
3.6.0 - 3.6.4 | 5.6.4+ |
4.0.0+ | 6.1.1+ |
4.1.0+ | 6.5+ |
4.2.0+ | 6.7.1+ |
7.0 | 7.0+ |
由于以前两个插件的版本一直对应不上,容易造成大家的误解。Android Gradle的版本号 在Gradle发布7.0后,进行了同步。也就是我们在上面看到的。7.0之后就同步上了。两个版本号一致。
android gradle 7.0+更新
工具 | 最低版本 | 默认版本 |
---|---|---|
Gradle | 7.0.2 | 7.0.2 |
SDK Build Tools | 30.0.2 | 30.0.2 |
NDK | 不适用 | 21.4.7075529 |
JDK | 11 | 11 |
也就是我们如果将Android Gradle 升级到7.0后,我们的Gradle必须要在7.0.2以上。并且jdk必须是11.而不再是jdk8了。
二、build.gradle里的各种配置
1、project的build.gradle
buildscript {
apply from: "config.gradle"//引用全局配置
// 配置 Gradle 脚本依赖项上所需要的存储库
addRepos(repositories)
// 配置 Gradle 脚本所需要的依赖项
dependencies {
classpath deps.android_gradle_plugin
classpath deps.android_greendao_plugin
classpath deps.android_butterknife_gradle_plugin
classpath deps.huawei_agconnect
// 添加神策分析 android-gradle-plugin2 依赖
classpath deps.sensorsdata_plugin
}
// 配置 Gradle 脚本依赖项上所需要的存储库
repositories {
google()
}
}
// 配置项目本身及其每个子项目所需要的依赖
allprojects {
// 配置此项目所需依赖的存储库
addRepos(repositories)
}
// 运行 gradle clean 时,执行此处定义的 task 任务。该任务继承自 Delete,删除根目录中的 build 目录。
// 相当于执行Delete.delete(rootProject.buildDir)。
task clean(type: Delete) {
delete rootProject.buildDir
}
//指定编译的编码
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
2、app的build.gradle
//声明时Android程序
//com.android.application 表示这是一个应用程序模块,可直接运行
// com.android.library 标识这是一个库模块,是依附别的应用程序运行
apply plugin: 'com.android.application'
android {
// 编译sdk的版本,也就是API Level,例如API-20、API-28等等。
compileSdkVersion 28
// build tools的版本,其中包括了打包工具aapt、dx等
// 这个工具的目录位于你的sdk目录/build-tools/下
buildToolsVersion "28.0.2"
// 默认配置 应用程序包名、最小sdk版本、目标sdk版本、版本号、版本名称
defaultConfig {
applicationId "xx.xx.xx" //应用程序的包名
minSdkVersion 16 //最小sdk版本,如果设备小于这个版本或者大于maxSdkVersion将无法安装这个应用
targetSdkVersion 28 //目标sdk版本,充分测试过的版本(建议版本)
versionCode 1//版本号,第一版是1,之后每更新一次加1
versionName "1.0"//版本名,显示给用户看到的版本号
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"//Instrumentation单元测试
}
//signingConfigs 一定要在 buildTypes 之前 否则 找不到config
signingConfigs {// 签名配置
debug {
keyAlias 'xxx'
keyPassword 'xxxxx'
storeFile file('./xxxx.jks')
storePassword 'xxxx'
}
release {
keyAlias 'xxx'
keyPassword 'xxxx'
storeFile file('./xxx.jks')
storePassword 'xxxxx'
}
}
// 指定生成安装文件的配置,是否对代码进行混淆;
//常有两个子包:release,debug,注:直接运行的都是debug安装文件
buildTypes {
// release版本的配置,即生成正式版安装文件的配置
release {
debuggable false
minifyEnabled false// 是否对代码进行混淆,true表示混淆
zipAlignEnabled true// 是否支持zip
shrinkResources true //资源瘦身
// proguard-android.txt指所有项目通用的混淆规则,proguard-rules.pro当前项目特有 的混淆规则
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {//通过修改SourceSets中的属性,可以指定需要被编译的源文件,不在指定路径下的源文件将会被排除(即不会被编译)
main {
jniLibs.srcDirs = ['libs'] // 设置so包地址
res.srcDirs = ['src/main/res', 'src/main/res/person']// resource目录
}
dev {
java.srcDirs = ['src/dev', 'src/dev/java', 'src/dev/java/']// java源代码目录
}
prod {
java.srcDirs = ['src/prod', 'src/prod/java', 'src/prod/java/']
}
}
// 分环境打包配置
productFlavors {
//开发环境打包配置
dev {
applicationId "com.cloudy.component"
buildConfigField "boolean", "IS_DEBUG", "true"
versionNameSuffix ".beta"
}
//生产环境打包配置
prod {
applicationId "com.cloudy.component"
buildConfigField "boolean", "IS_DEBUG", "false"
}
}
lintOptions {//lint 配置;
abortOnError false
checkReleaseBuilds false
}
}
repositories {//仓库配置
flatDir {
dirs 'libs'
dirs project(':lib_qr').file('libs')
dirs project(':lib_ntalkerChatUI').file('libs')
dirs project(':unityLibrary').file('libs')
dirs project(':lib_vc').file('libs')
}
}
dependencies {//指定当前项目的所有依赖、本地依赖,库依赖以及远程依赖;
implementation fileTree(dir: 'libs', include: ['*.jar'])// 本地依赖
implementation project(':library')// 库依赖声明
// 远程依赖,androidx.appcompat是域名部分,appcompat是组名称,1.0.2是版本号
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'// 声明测试用列库
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}