Android studio之 build.gradle配置

在使用Android studio创建项目会出现两个build.gradle:

一. Project项目级别的build.gradle

(1)、buildscript{}闭包里是gradle脚本执行所需依赖,分别是对应的maven库和插件。

闭包下包含:
1、repositories闭包
2、dependencies闭包

maven库 repositories 示列

    repositories {maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/' }google()jcenter()  //代码托管仓库mavenCentral()}

插件dependencies示列

dependencies {classpath 'com.android.tools.build:gradle:4.0.0'}

(2)、allprojects{}闭包里是项目本身需要的依赖,比如项目所需的maven库。`

闭包下包含:maven库repositories

maven库示列

 repositories {maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/' }google()jcenter() //代码托管仓库mavenCentral()}

(3)、task clean(type: Delete){}

  • 1、是gradle 运行clean时,执行此处定义的task任务,该任务继承自Delete,删除根目录中的build目录。其中buildscript包含repositories闭包和dependencies闭包。
  • 2、repositories{}闭包:配置远程仓库该闭包中声明了jcenter()和google()的配置,其中jcenter是一个代码托管仓库,上面托管了很多Android开源项目,在这里配置了jcenter后我们可以在项目中方便引用jcenter上的开源项目,从Android Studio3.0后新增了google()配置,可以引用google上的开源项目。
  • 3、dependencies{}闭包:配置构建工具,该闭包使用classpath声明了一个Gradle插件,由于Gradle并不只是用来构建Android项目,因此此处引入相关插件来构建Android项目,其中’4.0.0’为该插件的版本号,可以根据最新的版本号来调整。

二. app模块下的build.gradle

(1)、apply 声明是Android程序 ,apply plugin表示应用了一个插件,一般分为两种类型:application程序木块和library模块

  • 1、apply plugin: ‘com.android.application’ 表示这是一个应用程序模块
  • 2、apply plugin: ‘com.android.library’ 标识这是一个库模块
  • 3、apply from: ‘config.gradle’ 标识这是一个自定义的配置gradle

(2)、android{}闭包下的配置

  • compileSdkVersion是用来指定编译应用程序时所使用的Android SDK版本。它对应于在项目的build.gradle文件中的android块中设置的值。一般情况下,我们将其设置为最新的Android SDK版本,以便能够使用最新的Android平台提供的功能和特性

  • compileSdkVersionminSdkVersion比较,compileSdkVersion表示当前项目的编译版本,即你想让AndroidStudio以什么SDK版本去编译你的项目,minSdkVersion表示当前项目支持的最低安卓系统版本,

  • buildToolsVersion则是指构建工具的SDK版本,也就是AndroidStudio中设置的AndroidSDK版本,buildToolsVersion要高于compileSdkVersion版本,这个很好理解,如果编译版本高于AndroidStudio的SDK版本,那AndroidStudio怎么给项目编译呢?

  • targetSdkVersion app的目标sdk版本,可以理解为当前app在这个版本是比较稳定的,针对这个版本所开发的,是安卓提供的前向兼容的主要手段,它的作用就是当targetSdkVersion为20的app运行在系统版本号高于20的手机系统中,app所执行的旧版本api,在高版本可能不一样了,但是安卓为了兼容在系统层会读取当前应用的targetSdkVersion,当targetSdkVersion版本号低于当前版本就会执行旧版本的api,不会导致由于系统的原因而让app运行失常。

  • defaultConfig{} 是 Android Gradle 插件中使用的默认配置块。它用于指定应用程序的默认配置参数。

 defaultConfig {applicationId "com.yxj.xxxx"minSdkVersion rootProject.ext.android.minSdkVersiontargetSdkVersion rootProject.ext.android.targetSdkVersionversionCode 0000versionName "1.1.0000"ndk {
//            1、armeabi-v7a:第七代及以上的ARM处理器,2011年以后生产的大部分Android设备都使用。
//            2、arm64-v8a:第8代、64位ARM处理器,很少设备,三星GalaxyS6是其中之一。
//            3、armeabi:第5代、第6代的ARM处理器,早期的手机用的比较多。
//            4、X86:平板、模拟器用得比较多。
//            5、X86_64:64位得平板。
//            abiFilters 'armeabi', 'x86',"armeabi-v7a", "arm64-v8a",'x86_64'}//Android应用程序默认具有SingleDex支持,这限制了您的应用程序只有65536个方法(引用).所以multidexEnabled = true只是意味着你现在可以在你的应用程序中编写超过65536个方法(引用).multiDexEnabled true}
  • 自动化打包配置signingConfigs{}
signingConfigs {debug {storeFile file('F:\\Android_work\\work\\xxx.keystore')storePassword '000000'keyAlias = 'keyAlias'  //key的别名keyPassword '000000'v1SigningEnabled truev2SigningEnabled true}release {storeFile file('F:\\Android_work\\work\\xxx.keystore')storePassword '000000'keyAlias = 'keyAlias '//key的别名keyPassword '000000'v1SigningEnabled truev2SigningEnabled true}}
  • lintOptions{} 用于配置静态代码分析工具Lint的参数和行为
lintOptions {// true--关闭lint报告的分析进度quiet true// true--错误发生后停止gradle构建abortOnError false// true--只报告errorignoreWarnings true// true--忽略有错误的文件的全/绝对路径(默认是true)//absolutePaths true// true--检查所有问题点,包含其他默认关闭项checkAllWarnings true// true--所有warning当做errorwarningsAsErrors true// 关闭指定问题检查disable 'TypographyFractions','TypographyQuotes'// 打开指定问题检查enable 'RtlHardcoded','RtlCompat', 'RtlEnabled'// 仅检查指定问题check 'NewApi', 'InlinedApi'// true--error输出文件不包含源码行号noLines true// true--显示错误的所有发生位置,不截取showAll true// 回退lint设置(默认规则)lintConfig file("default-lint.xml")// true--生成txt格式报告(默认false)textReport true// 重定向输出;可以是文件或'stdout'textOutput 'stdout'// true--生成XML格式报告xmlReport false// 指定xml报告文档(默认lint-results.xml)xmlOutput file("lint-report.xml")// true--生成HTML报告(带问题解释,源码位置,等)htmlReport true// html报告可选路径(构建器默认是lint-results.html )htmlOutput file("lint-report.html")//  true--所有正式版构建执行规则生成崩溃的lint检查,如果有崩溃问题将停止构建checkReleaseBuilds true// 在发布版本编译时检查(即使不包含lint目标),指定问题的规则生成崩溃fatal 'NewApi', 'InlineApi'// 指定问题的规则生成错误error 'Wakelock', 'TextViewEdits'// 指定问题的规则生成警告warning 'ResourceAsColor'// 忽略指定问题的规则(同关闭检查)ignore 'TypographyQuotes'}
  • compileOptions{}是一个用于配置 Gradle 编译选项的对象。它可以在 Gradle 构建文件中使用
  compileOptions {//配置 Java 编译参数:sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8// Java 编译器标志参数:compilerArgs.addAll(['-Xlint:unchecked', '-Xlint:deprecation'])//配置 Kotlin 编译参数:kotlinOptions {jvmTarget = "1.8"freeCompilerArgs += ['-Xopt-in=kotlin.RequiresOptIn']//配置 C 语言编译参数:apply plugin: 'cpp'cppCompilerArgs.add('-std=c99')cppCompilerArgs.add('-Wall')//配置 C++ 编译参数:apply plugin: 'cpp'cppCompilerArgs.add('-std=c++11')cppCompilerArgs.add('-Wall')}
  • buildTypes{}可以配置我们需要的构建类型,例如我们常用到的 “测试类型” 和 “本地类型”,则可以使用如下配置
  1. minifyEnabled:表明是否对代码进行混淆,true表示对代码进行混淆,false表示对代码不进行混淆,默认的是false。
  2. proguardFiles: 指定混淆的规则文件,这里指定了proguard-android.txt文件和proguard-rules.pro文件两个文件,proguard-android.txt文件为默认的混淆文件,里面定义了一些通用的混淆规则。proguard-rules.pro文件位于当前项目的根目录下,可以在该文件中定义一些项目特有的混淆规则。
  3. buildConfigField:用于解决Beta版本服务和Release版本服务地址不同或者一些Log打印需求控制的。例如:配置buildConfigField(“boolean”, “LOG_DEBUG”, “true”),这个方法接收三个非空的参数,第一个:确定值的类型,第二个:指定key的名字,第三个:传值,调用的时候BuildConfig.LOG_DEBUG即可调用。
  4. debuggable:表示是否支持断点调试,release默认为false,debug默认为true。
  5. jniDebuggable:表示是否可以调试NDK代码,使用lldb进行c和c++代码调试,release默认为false
  6. signingConfig:设置签名信息,通过signingConfigs.release或者signingConfigs.debug,配置相应的签名,但是添加此配置前必须先添加signingConfigs闭包,添加相应的签名信息。
  7. renderscriptDebuggable:表示是否开启渲染脚本就是一些c写的渲染方法,默认为false。
  8. renderscriptOptimLevel:表示渲染等级,默认是3。
  9. pseudoLocalesEnabled:是否在APK中生成伪语言环境,帮助国际化的东西,一般使用的不多。
  10. applicationIdSuffix:和defaultConfig中配置是一的,这里是在applicationId
    中添加了一个后缀,一般使用的不多。
  11. versionNameSuffix:表示添加版本名称的后缀,一般使用的不多。
  12. zipAlignEnabled:表示是否对APK包执行ZIP对齐优化,减小zip体积,增加运行效率,release和debug默认都为true。
     buildTypes {//发布版本类型release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}// 测试类型,给测试人员debug{minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}// 本地类型,和后端联调使用local{minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}
  • packagingOptions{}是一个用于配置Android项目的属性,用于控制应用程序打包过程中的资源和依赖项的处理方式。这个属性通常用于解决资源冲突和冗余问题。
    在Android中,一个应用程序可能会依赖多个库或模块,每个库或模块都可能包含一些相同的资源文件或类文件。当编译和打包应用程序时,如果存在冲突的资源文件或类文件,编译器将会抛出错误。packagingOptions提供了一种配置方式,让开发者能够控制冲突的处理方式。
   // 配置packagingOptionspackagingOptions {//exclude:用于排除特定的资源文件或类文件,使其不被打包到最终的APK文件中。可以使用通配符来匹配文件名或文件路径exclude 'META-INF/LICENSE.txt' // 排除名为LICENSE.txt的文件exclude 'META-INF/*.txt' // 排除所有以.txt结尾的文件//merge:用于控制冲突资源文件的合并策略。可以使用"0"表示不合并,使用"1"表示合并,使用"2"表示强制合并。merge 'resources.arsc' 0 // 不合并resources.arsc文件merge 'assets/strings.txt' 1 // 合并assets目录下的strings.txt文件merge 'assets/*.txt' 2 // 强制合并assets目录下所有以.txt结尾的文件//pickFirst:用于控制冲突资源文件的优先选择策略。可以使用"0"表示选择第一个出现的文件,使用"1"表示选择最后一个出现的文件,使用"2"表示选择全部文件。pickFirst 'res/values/strings.xml' 0 // 选择第一个出现的strings.xml文件pickFirst 'assets/logo.png' 1 // 选择最后一个出现的logo.png文件pickFirst 'assets/*.png' 2 // 选择全部以.png结尾的文件//doNotStrip  Gradle 在构建 APK 时将会保留这些被标记的文件和文件夹,并不会进行剥离操作。doNotStrip "*/armeabi/libYTCommon.so"doNotStrip "*/armeabi-v7a/libYTCommon.so"doNotStrip "*/x86/libYTCommon.so"doNotStrip "*/arm64-v8a/libYTCommon.so"}
  • sourceSets{}可以指定需要被编译的源文件,不在指定路径下的源文件将会被排除(即不会被编译)。Gradle通过SourceSets实现了Java项目的目录布局定义
sourceSets {main {manifest.srcFile 'AndroidManifest.xml'java.srcDirs = ['src']resources.srcDirs = ['src']aidl.srcDirs = ['src']renderscript.srcDirs = ['src']res.srcDirs = ['res']assets.srcDirs = ['assets']jniLibs.srcDirs = ['libs']//如果我们不想用默认的,可以重新指定,按如下方式就可以修改目录布局结构java {srcDir 'src/java' // 指定源码目录}resources {srcDir 'src/resources' //资源目录}}
  • aaptOptions{} aapt 全称为 Android Asset Packaging Tool,即为Android资源打包工具。可以通过其来进行配置打包的细节。
aaptOptions {//给 aapt 执行时添加额外参数,添加的参数可通过 aapt --help 进行查看additionalParameters '--auto-add-overlay'additionalParameters '--rename-manifest-package','com.zinc.test'      // 会将包名更改为 com.zinc.test//设置线程数cruncherProcesses 4//设置是否无法找到配置条目,则强制aapt返回错误。failOnMissingConfigEntry true//设置忽略的资源// 忽略掉 png 后缀的图像,只会排除 assets 下的资源,res下的资源不会排除ignoreAssets "*.png"//设置忽略的资源  noCompress 'foo', 'bar'ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"// 忽略掉 png 后缀的图像,只会排除 res 下的资源,assets下的资源不会排除ignoreAssetsPattern '*.png'//是否对资源进行压缩,默认不对"jpg"、"png"压缩。如果传入’’,则表明全部资源不会进行压缩。压缩后的资源可以通过 aapt l -v apk路径 进行查看压缩的细节。// 不对 bat 进行压缩noCompress '.bat'}
  • productFlavors{}闭包:多个渠道配置
    productFlavors是android{}中的一个扩展属性,主要用来让同一套代码可以打包成不同的apk包,又可以成为变体(Variants)。其实该productFlavors属性是与buildTypes配合使用的

  • buildFeatures

(3)、dependencies{}闭包是指在开发 Android 应用程序时,所需的各种库和模块。这些依赖项可以帮助开发者实现不同的功能和特性,例如网络请求、图形绘制、数据库操作等

dependencies {//引入文件树,这里会把libs目录下所有的jar包自动引入implementation fileTree(dir: 'libs', include: ['*.jar'])implementation 'com.android.support:appcompat-v7:26.1.0'implementation 'com.android.support.constraint:constraint-layout:1.1.2'testImplementation 'junit:junit:4.12'androidTestImplementation 'com.android.support.test:runner:1.0.2'androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'//引入指定jar包文件,这里传递是相对路径即相当于module下的build.gradle文件的路径,如以下写法则是引入与module下的build.gradle同路径下的jar包implementation files('crazymo.jar')//引入依赖库Module方式1implementation project(':libcrazymo') implementation project(path:':libcrazymo') 
}

gradle3.0中compile依赖关系已被弃用,被implementation和api替代,provided被compile only替代,apk被runtime only替代。

  • runtime only——只打包不参与编译,用于指定Gradle
    不与应用的apk一起打包的依赖库,如果运行时无需依赖此依赖库,这将有助于apk大小的优化。
  • compile only——只编译不打包到apk
  • api——跟2.x版本的 compile完全相同
  • implementation——只能在内部使用此模块,比如我在一个library中使用implementation依赖了gson库且我的主项目依赖了library,那么主项目就无法访问gson库中的方法,这样的好处是编译速度会加快,推荐使用implementation的方式去依赖,如果你需要提供给外部访问,那么就使用api依赖即可。除了使用静态依赖的方式,还可以使用动态的形式进行依赖(实际项目中不太推荐),以下就是使用另一种形式进行依赖,虽然使用三句话都配置了相同的group和module的依赖,不过编译不会出错,因为Groovy会自动为你选择最新版本的并排除重复的。

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

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

相关文章

16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及JDBC示例(4)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

git 查看某个分支是从哪个分支拉出来的

原文链接:https://blog.csdn.net/allanGold/article/details/102478157 git reflog show 分支名git reflog --datelocal | grep 分支名git reflog --datelocal | grep 分支名 $ git reflog --datelocal | grep release3 5c50761 HEAD{Thu Jun 29 12:53:45 2023}: c…

3D旅游情景实训教学展示

随着科技的不断发展,情景实训教学在教育领域中的应用越来越广泛。通过虚拟现实技术,3D视觉技术,计算机技术等为学生提供了一个身临其境的学习环境,让他们能够在模拟的场景中学习和实践,从而更好地理解和掌握知识。 3D虚…

Docker搭建LNMP运行Wordpress平台

一、项目1.1 项目环境1.2 服务器环境1.3 任务需求 二、Linux 系统基础镜像三、Nginx1、建立工作目录2、编写 Dockerfile 脚本3、准备 nginx.conf 配置文件4、生成镜像5、创建自定义网络6、启动镜像容器7、验证 nginx 四、Mysql1、建立工作目录2、编写 Dockerfile3、准备 my.cnf…

红黑树遍历与Redis存储

引言 在计算机科学领域,红黑树(Red-Black Tree)是一种自平衡的二叉查找树,它能在O(log n)的时间复杂度内完成插入、删除和查找操作。由于其高效性和可预测性的性能,红黑树在许多领域都得到广泛应用。本文将重点介绍红…

Ubuntu系统安装之后首需要做的事情

Ubuntu系统的初步环境搭建 1、换源2、显卡3、浏览器4、输入法5、终端6、ROS7、VSCode8、设置时间与win一致9、 TimeShift10、 Anaconda(考虑装不装) 1、换源 点开Software&&Update,找到Ubuntu Software中的Download from&#xff0c…

html5提供的FileReader是一种异步文件读取文件中的数据

前言&#xff1a;FileReader是一种异步文件读取机制&#xff0c;结合input:file可以很方便的读取本地文件。 input:file 在介绍FileReader之前&#xff0c;先简单介绍input的file类型。 <input type"file" id"file"> input的file类型会渲染为一个按…

Web3.0

一、Web3.0是什么 Web3.0&#xff08;有时称为“分布式Web”或“去中心化Web”&#xff09;是对互联网的下一代演进的概念。它代表了一种更加分散、去中心化和用户掌控的互联网模式&#xff0c;与传统的Web2.0模型有很大不同。 以下是Web3.0的一些关键特征和概念&#xff1a;…

c++ java rgb与nv21互转

目录 jni函数 c++ rgb转nv21,可以转,不报错,但是转完只有黑白图 java yuv420保存图片,先转nv21,再保存ok: c++ yuv420月bgr互转,测试ok jni函数 JNIEXPORT void JNICALL Java_com_tencent_blazefacencnn_BlazeFaceNcnn_encode(JNIEnv *env,jobject thiz, jobject in…

Qt-事件循环与QtConcurrent、QThread结合使用时注意的点

QEventLoop和QtConcurrent可以结合使用达到主线程ui不阻塞同步执行的效果&#xff0c;但是要小心避坑&#xff0c;查看如下代码&#xff1a; QEventLoop loop; QtConcurrent::run([&]() {doSomething();loop.quit(); }); loop.exec();上述写法存在两个问题&#xff1a; Q…

Linux学习记录——이십오 多线程(2)

文章目录 1、理解原生线程库线程局部存储 2、互斥1、并发代码&#xff08;抢票&#xff09;2、锁3、互斥锁的实现原理 3、线程封装1、线程本体2、封装锁 4、线程安全5、死锁6、线程同步1、条件变量1、接口2、demo代码 1、理解原生线程库 线程库在物理内存中存在&#xff0c;也…

[bug日志]springboot多模块启动,在yml配置启动端口8081,但还是启动了8080

【问题描述】 配置的启动端口是8081&#xff0c;实际启动端口是8080 【解决方法】 1.检查application.yml的配置是否有错误(配置项中&#xff0c;显示白色就错&#xff0c;橙色无措) 2.检查pom.xml的打包方式配置项配置&#xff0c;主pom.xml中的配置项一般为&#xff1a;&l…

【hello git】初识Git

目录 一、简述Git 二、Linux 下 Git 的安装&#xff1a;CentOS 2.1 基本命令 2.2 示例&#xff1a; 三、Linux 下 Git 的安装&#xff1a;ubuntu 3.1 基本命令 3.2 示例&#xff1a; 一、简述Git Git &#xff1a;版本控制器&#xff0c;记录每次的修改以及版本迭代的一个管…

day 37 | ● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

1049. 最后一块石头的重量 II 与前一道分割等和子集的思路差不多&#xff0c;都是01背包问题。因为是采用滚动数组的形式&#xff0c;所以必须要倒序遍历才可以。 dp[i]代表着在i的限制下最大的承重。所以另一半就是all - dp【all / 2】 func lastStoneWeightII(stones []int…

使用自定义 C ++运算符扩展 TorchScript

使用自定义 C 运算符扩展 TorchScript PyTorch 1.0 版本向 PyTorch 引入了一种新的编程模型&#xff0c;称为 TorchScript 。 TorchScript 是 Python 编程语言的子集&#xff0c;可以通过 TorchScript 编译器进行解析&#xff0c;编译和优化。 此外&#xff0c;已编译的 Torch…

流媒体内容分发终极解决方案:当融合CDN与P2P视频交付结合

前言 随着互联网的发展&#xff0c;流媒体视频内容日趋增多&#xff0c;已经成为互联网信息的主要承载方式。相对传统的文字&#xff0c;图片等传统WEB应用&#xff0c;流媒体具有高数据量&#xff0c;高带宽、高访问量和高服务质量要求的特点&#xff0c;而现阶段互联网“尽力…

【图论】最小生成树的应用

一.题目 P1550 [USACO08OCT] Watering Hole G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 二.分析 1.我们是要使所有的农场都要有水 2.可以从起点引水&#xff0c;也可以互相引水。 3.费用要最小 这时我们可以想到最小生成树&#xff0c;建立一个虚拟节点即可。思路一…

ARM汇编【3】:LOAD/STORE MULTIPLE PUSH AND POP

LOAD/STORE MULTIPLE 有时一次加载&#xff08;或存储&#xff09;多个值更有效。为此&#xff0c;我们使用LDM&#xff08;加载多个&#xff09;和STM&#xff08;存储多个&#xff09;。这些指令有一些变化&#xff0c;基本上只在访问初始地址的方式上有所不同。这是…

容器——Docker

1.安装docker服务&#xff0c;配置镜像加速器 2.下载系统镜像&#xff08;Ubuntu、 centos&#xff09; 3.基于下载的镜像创建两个容器 &#xff08;容器名一个为自己名字全拼&#xff0c;一个为首名字字母&#xff09; 4.容器的启动、 停止及重启操作 5.怎么查看正在运行的容器…

java中用SXSSFWorkbook把多个list数据和单个实体dto导出到excel如何导出到多个sheet页详细实例?(亲测)

以下是一个详细的示例&#xff0c;展示了如何使用SXSSFWorkbook将多个List数据和单个实体DTO导出到多个Sheet页&#xff1a; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.poi.xssf.streaming.S…