Android Studio Gradle相关

news2024/12/26 15:54:26

一、区分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'
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年上半年软考中级数据库系统工程师如何高效备考?难吗?

考试题型介绍: (1)基础知识,考试时间为150分钟,笔试,满分75分。45分及格。 (2)应用技术,考试时间为150分钟,笔试,满分75分。45分及格。 &#…

思维导图之设计原则

设计原则是指导我们代码设计的一些经验总结,对于某些场景下,是否应该应用某种设计模式,具有指导意义。 设计原则总结如下图所示:

[附源码]SSM计算机毕业设计学生互评的在线作业管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

pycare检测时间序列异常

1. 获取时间序列数据(官方文档是多特征,本文举例是单特征) 未安装pycaret的先安装:pip install --pre pycaret (也可以pip install pycaret) 2.用pycaret检测异常一般用pycaret.anomaly pycaret.anomaly…

七、【React-Router5】嵌套路由

文章目录1、实现效果2、嵌套路由规则3、修改上一节代码3.1、项目结构变更如下3.2、CODE3.2.1、Home.jsx3.2.2、Message.jsx3.2.3、News.jsx3.3、Result1、实现效果 2、嵌套路由规则 注册子路由时要写上父路由的path值路由的匹配是按照注册路由的顺序进行的 3、修改上一节代码…

SparkMlib 之决策树及其案例

文章目录什么是决策树?决策树的优缺点决策树示例——鸢尾花分类什么是决策树? 决策树及其集成是分类和回归机器学习任务的流行方法。决策树被广泛使用,因为它们易于解释,处理分类特征,扩展到多类分类设置,…

信号类型(雷达)——连续波雷达(二)

系列文章目录 《信号类型(雷达通信)》 《信号类型(雷达)——雷达波形认识(一)》 文章目录 目录 一、连续波雷达信号 1.1 单频雷达信号 1.2 调频连续波雷达 1.3 相位编码连续波雷达 1.4 多频连续波雷…

【AI学习笔记】TensorFlow GPU版本的安装(超详细)

安装步骤:1. 确认显卡是否支持CUDA2. 安装CUDA3. 安装cuDNN3.1 安装 cudnn3.2 将cudnn64_8.dll存放的位置加入Path环境变量4. 安装TensorFlow GPU版本4.1 在Anaconda建立TensorFlow GPU虚拟环境4.2 安装Tensorflow-gpu4.3 安装Keras总结1. 确认显卡是否支持CUDA 在…

【计算机】可信平台模块Trusted Platform Module - TPM

简述 Brief Introduction TPM内部功能模块示意图: 引述 Trusted Platform Module Technology Overview (Windows) | Microsoft Learn: Trusted Platform Module (TPM) technology is designed to provide hardware-based, security-related functions.…

速锐得解码理想汽车L8方向盘转向角度应用随动大灯照明升级

前日,速锐得解码了理想汽车L8车型,由于理想L8是新款车型,架构和理想L9十分相似,与理想ONE这一代有比较大的差异,这恰恰也是我们很好的一次学习机会,也让我们重新认识了理想汽车。 我这里,只挑有…

PCL 点云的法向量

一,点的法向量 点云法线 法向量的概念是很小的时候我们就已经说的,法向量是我们点云中一个非常重要的属性,诸如饿哦们常说的三维重建、点云分割,点云去噪 以及特种描述算法等。 特性: 点云中每一点的法向量夹角和曲率…

【即将开源】⽤于3D激光雷达SLAM闭环检测的词袋模型BoW3D

​以下内容来自从零开始机器人SLAM知识星球 每日更新内容 点击领取学习资料 → 机器人SLAM学习资料大礼包 #论文# BoW3D: Bag of Words for Real-time Loop Closing in 3D LiDAR SLAM 论文地址:https://arxiv.org/abs/2208.07473 作者单位:中国沈阳自动…

C++基础语法

cout输出 cin是键盘输入 //i input 输入 o output输出 stream流 输入输出流头文件&#xff08;类似stdio.h&#xff09; 2 #include <iostream> 3 4 //std(标准) 使用标准的命名空间using namespace std;//命名空间,此标识符作为此组群的名字 5 using namespace std; 6…

A*算法-Python实现

好久没有在CSDN上发文章了&#xff0c;快一年了吧。这两天重新登录了一下&#xff0c;不看不知道&#xff0c;一看吓一跳&#xff0c;没想到访问量快13万了。 之前写博客的时候&#xff0c;想着把一些有用的东西写下来&#xff0c;一方面是当做笔记了&#xff0c;免得以后忘记…

小程序数据请求的方式和注意事项

1.小程序中网络数据请求的限制 出于安全性方面的考虑&#xff0c;小程序官方对数据接口的请求做出了如下两个限制&#xff1a; ① 只能请求HTTPS类型的接口 ② 必须将接口的域名添加到信任列表中 2.配置request合法域名 假设要在自己的微信小程序中&#xff0c;希望请求某…

Mysql 索引基数与选择性

这篇文章主要介绍 MySQL 索引的 Cardinality 值&#xff08;基数&#xff09;以及索引的可选择性。 什么是索引&#xff1f; 先看一下 wiki 定义&#xff1a; 索引&#xff08;英语&#xff1a;Index&#xff09;&#xff0c;是一本书籍的重要组成部分&#xff0c;它把书中的…

微信小程序中基础入门

一、数据绑定 1.数据绑定的基本原则 ① 在data中定义数据&#xff08;在.js文件&#xff09; ② 在wxml中使用数据 2.Mustache语法的格式 把data中的数据绑定到页面中进行渲染&#xff0c;使用MUstache语法&#xff08;双大括号&#xff0c;可以理解为vue中的插值表达式&…

Redis——》数据类型:List(列表)

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Redis——》数据类型&#xff1a;List&#xff08;列表&#xff09;一、简介…

Linux02——操作系统接口

一、前言 OS是软硬件之前的桥梁&#xff1a;操作系统管理硬件&#xff0c;最终以服务的形式提供给用户。如用户读取磁盘数据&#xff0c;OS设备管理将读出来的数据通过文件系统交给用户。OS管理员对CPU&#xff08;进程&#xff09;管理&#xff0c;对内存管理&#xff0c;对设…

PyCharm中鼠标悬停在函数上时显示函数和帮助

一、问题 1.1 鼠标放上去不显示文档的提示 鼠标放在随意一个函数上面不显示他的说明了 我也不知道是咋了 二、解决 2.1 首先我只记得有一个侧边栏叫document 经典的解决办法 2.2 在setting中查看这是干嘛的 很多东西都可以在setting中查看到具体的功能 还可以查看到从哪里能…