参考博客
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_pluginclasspath deps.android_greendao_pluginclasspath deps.android_butterknife_gradle_pluginclasspath 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,之后每更新一次加1versionName "1.0"//版本名,显示给用户看到的版本号testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"//Instrumentation单元测试}//signingConfigs 一定要在 buildTypes 之前 否则 找不到configsigningConfigs {// 签名配置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 falseminifyEnabled false// 是否对代码进行混淆,true表示混淆zipAlignEnabled true// 是否支持zipshrinkResources 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 falsecheckReleaseBuilds 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'
}
参考博客1
参考博客2
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')
}
上一篇:遇到Bug漏测,不能总想着甩锅吧