Android Studio Gradle相关

一、区分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.32.2.1 - 2.3
1.2.0 - 1.3.12.2.1 - 2.9
1.5.02.2.1 - 2.13
2.0.0 - 2.1.22.10 - 2.13
2.1.3 - 2.2.32.14.1 - 3.5
2.3.0+3.3+
3.0.0+4.1+
3.1.0+4.4+
3.2.0 - 3.2.14.6+
3.3.0 - 3.3.34.10.1+
3.4.0 - 3.4.35.1.1+
3.5.0 - 3.5.45.4.1+
3.6.0 - 3.6.45.6.4+
4.0.0+6.1.1+
4.1.0+6.5+
4.2.0+6.7.1+
7.07.0+

由于以前两个插件的版本一直对应不上,容易造成大家的误解。Android Gradle的版本号 在Gradle发布7.0后,进行了同步。也就是我们在上面看到的。7.0之后就同步上了。两个版本号一致。

 android gradle 7.0+更新

工具最低版本默认版本
Gradle7.0.27.0.2
SDK Build Tools30.0.230.0.2
NDK不适用21.4.7075529
JDK1111

也就是我们如果将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'
}

三、gradle中第三方库的配置

参考博客1

参考博客2

android中常见的第三方库为:so,jar,aar

so一般来说.是C或C++语言的内容打包成的库。

jar只包含了class文件与清单文件 ,不包含资源文件(如图片等所有res中的文件)。

aar包含所有资源(class以及res资源文件)。

 1、so依赖

so文件默认在app/src/main/jniLibs路径下。如果更改so文件到指定位置下,需要重新设置gradle

例如将so文件放在app/libs目录下

// app的build.gradle
android {
    ...
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']  //这个必须加,因为我们把.so文件放在了libs文件夹中
        }
    }
}

2、jar依赖

将jar包放入libs目录下,再添加gradle依赖

 dependencies { 
         implementation fileTree(include: ['*.jar'], dir: 'libs')
             }

3、aar依赖

将aar文件放置到libs文件夹,再添加gradle依赖

android {
    ...
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    implementation(name: 'lfilepickerlibrary-release', ext: 'aar')
}

四、gradle语言

gradle文件里用的语言是groovy,具体语法可参考博客

了解groovy

gradle配置

https://juejin.cn/post/6844903455786549255

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值