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之后就同步上了。两个版本号一致。
| 工具 | 最低版本 | 默认版本 |
|---|---|---|
| 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了。
- 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"
- }
- //声明时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'
- }
-
android中常见的第三方库为:so,jar,aar
so一般来说.是C或C++语言的内容打包成的库。
jar只包含了class文件与清单文件 ,不包含资源文件(如图片等所有res中的文件)。
aar包含所有资源(class以及res资源文件)。
so文件默认在app/src/main/jniLibs路径下。如果更改so文件到指定位置下,需要重新设置gradle
例如将so文件放在app/libs目录下
- // app的build.gradle
- android {
- ...
- sourceSets {
- main {
- jniLibs.srcDirs = ['libs'] //这个必须加,因为我们把.so文件放在了libs文件夹中
- }
- }
- }
将jar包放入libs目录下,再添加gradle依赖
- dependencies {
- implementation fileTree(include: ['*.jar'], dir: 'libs')
- }
将aar文件放置到libs文件夹,再添加gradle依赖
- android {
- ...
- repositories {
- flatDir {
- dirs 'libs'
- }
- }
- }
-
- dependencies {
- implementation(name: 'lfilepickerlibrary-release', ext: 'aar')
- }
gradle文件里用的语言是groovy,具体语法可参考博客