Android——Gradle插件项目根目录settings.gradle和build.gradle

一、settings.gradle结构分析

项目根目录下的settings.gradle配置文件示例:

pluginManagement {/*** The pluginManagement.repositories block configures the* repositories Gradle uses to search or download the Gradle plugins and* their transitive dependencies. Gradle pre-configures support for remote* repositories such as JCenter, Maven Central, and Ivy. You can also use* local repositories or define your own remote repositories. The code below* defines the Gradle Plugin Portal, Google's Maven repository,* and the Maven Central Repository as the repositories Gradle should use to look for its* dependencies.*/repositories {gradlePluginPortal()google()mavenCentral()}
}
dependencyResolutionManagement {/*** The dependencyResolutionManagement.repositories* block is where you configure the repositories and dependencies used by* all modules in your project, such as libraries that you are using to* create your application. However, you should configure module-specific* dependencies in each module-level build.gradle file. For new projects,* Android Studio includes Google's Maven repository and the Maven Central* Repository by default, but it does not configure any dependencies (unless* you select a template that requires some).*/repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {google()mavenCentral()flatDir {dirs 'libs'}}}rootProject.name='TestAndroidProject'
include ':AliPay'
include ':app'

(1)pluginManagement配置块

  • 对每个项目和全局的配置。
  • pluginManagement{}块只能出现在两个设置中。 一个是settings.gradle文件,它必须是文件中的第一个代码块,顺序第一出现;另一个是Initialization Scripts,不在本文讨论内。
pluginManagement {plugins {  //插件配置}resolutionStrategy {//插件策略配置}repositories { //插件运行,依赖的仓库//按照配置顺序寻找gradlePluginPortal()google()mavenCentral()//本地仓库配置maven { url 'file://E:/libs/localMaven/' }//远程仓库+地址配置maven { url 'https://repo1.maven.org/maven2/' }}}
  • 具体使用官方网址:Gradle-pluginManagement使用
  • pluginManagement 脚本块中的 repositories 配置 , 对应之前的 buildscript 中的 repositories 配置 

(2)dependencyResolutionManagement配置块

settings.gradle 中部分

//使用Catalog统一依赖版本 开启VERSION_CATALOG
enableFeaturePreview('VERSION_CATALOGS')// 指定Gradle需要的用来搜索或下载【依赖dependency】的代码库
dependencyResolutionManagement {// 然而,为了配置一些模块特定的依赖,你需要在每一个模块的模块级build.gradle文件中进行配置说明repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {// 以下是AS默认configure的repositoriesgoogle()jcenter()mavenCentral()}//使用Catalog统一依赖版本versionCatalogs{libs {version('paging', '3.1.1')version('glide', '4.14.2')version('lifecycle', '2.4.1')version('appcompat', '1.4.1')alias('paging-runtime').to('androidx.paging', 'paging-runtime').versionRef('paging')alias('paging-guava').to('androidx.paging', 'paging-guava').versionRef('paging')alias('paging-rxjava2').to('androidx.paging', 'paging-rxjava2').versionRef('paging')alias('glide-v4').to('com.github.bumptech.glide', 'glide').versionRef('glide')alias('lifecycle-livedata').to('androidx.lifecycle', 'lifecycle-livedata-ktx').versionRef('lifecycle')alias('lifecycle-viewmodel').to('androidx.lifecycle', 'lifecycle-viewmodel-ktx').versionRef('lifecycle')alias('androidx-appcompat').to('androidx.appcompat', 'appcompat').versionRef('appcompat')}}
}

  • repositoriesMode 模式有两种 :

RepositoriesMode.PREFER_PROJECT : 解析依赖库时 , 优先使用本地仓库 , 本地仓库没有该依赖 , 则使用远程仓库 ;
RepositoriesMode.FAIL_ON_PROJECT_REPOS : 解析依赖库时 , 强行使用远程仓库 , 不管本地仓库有没有该依赖库 ;

  • dependencyResolutionManagement 脚本块中的 repositories 配置 , 对应之前的 allprojects 中的 repositories 配置 ;

参考文章1文章浏览阅读7.4k次,点赞52次,收藏45次。一、settings.gradle 构建脚本分析1、Maven 远程仓库配置2、目录配置3、完整代码示例二、根目录下 build.gradle 构建脚本分析_android settings.gradlehttps://blog.csdn.net/shulianghan/article/details/129802390

(3)settings.gradle对应Settings对象实例

settings.gradle 文件对应的gradle api中Settings对象实例,其api如下

Settings对象实例Api (Gradle API 8.4)icon-default.png?t=N7T8https://docs.gradle.org/current/javadoc/org/gradle/api/initialization/Settings.htmlsettings.gradle文件配置项,实际上及时调用该api中的方法和属性

二、build.gradle结构分析(根目录)

  • build.gradle是gradle构建脚本文件,支持java、groovy等语言。
  • 每个gradle项目或模块都会有一个build.gradle文件,该文件是项目构建的入口,可配置版本、插件依赖库等信息。
  • 每个build文件都有一个对应的project实例,配置build.gradle文件,实际就是设置project实例里面的属性,或者调用里面的方法。
  • 根项目的project实例可以获取到所有子项目或子模块的project实例,因此我们可以在根项目的build.gradle文件中对子项目进行统一配置,比如应用插件、依赖的maven中心仓库等,常见的build.gradle属性及方法如下所示

(1)项目根目录build.gradle

// 构建脚本
buildscript {// 定义全局变量,常用于版本管理// 变量在子模块的build.gradle中直接以: $NAME 的形式调用ext {compose_version = '1.0.1'lifecycleVersion = '2.3.1'kotlinVersion = '1.5.21'ktlintVersion = '0.41.0'coroutines = '1.5.0'moshi_version = '1.12.0'}
}// 依赖URL
// 之前于settings.gradle定义的是整体的仓库位置,而这里可以视为定义具体的依赖位置
// plugins定义项目中所有模块共用的 Gradle 依赖项
// apply false 不可以用于子模块的build.gradle
plugins {id 'com.android.application' version '7.1.0-rc01' apply falseid 'com.android.library' version '7.1.0-rc01' apply falseid 'org.jetbrains.kotlin.android' version '1.5.21' apply false
}// 定义清理build目录的对应方法
task clean(type: Delete) {delete rootProject.buildDir
}

  • buildscript

需要注意的是:
1)、buildscript代码段必须是build.gradle文件的第一个代码段;
2)、对于多模块构建,项目的buildscript代码段声明的依赖关系可用于所有子模块的构建脚本;
3)、构建脚本的依赖可能是gradle插件

(2)子目录下build.gradle

// 子模块的plugins
// 请注意!这里就不可以定义apply false了
plugins {id 'com.android.application'id 'org.jetbrains.kotlin.android'id 'dagger.hilt.android.plugin'
}// 应用插件 Kapt
// 这是一款kotlin专用的依赖管理插件,推荐每个项目都添加!
apply plugin: 'kotlin-kapt'// android
// 定义所有模块构建设置
android {// 定义编译SDK// 表示你的项目可以使用低于(或等于)该版本的所有APIcompileSdk 32// 定义默认配置defaultConfig {// 工件IDapplicationId "com.example.character"// 最低可接受SDK版本minSdk 21// 最高可接受SDK版本targetSdk 32// 给开发者看的项目版本versionCode 1// 给客户看的项目版本versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"vectorDrawables {useSupportLibrary true}}// 定义构建类型// 默认的构建类型有两种:debug(构建时会默认打上debug签名) release(构建时默认不打任何签名)buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}// 如果你用的是JDK8,那么请添加这个两个配置以提供支持compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = '1.8'}// 构建特性buildFeatures {compose true}// compose设置composeOptions {kotlinCompilerExtensionVersion compose_version}// 资源文件配置packagingOptions {resources {excludes += '/META-INF/{AL2.0,LGPL2.1}'}}
}// 在这里直接把你需要添加的依赖贴进去就好了
// 贴完后点sync即可
dependencies {implementation 'androidx.core:core-ktx:1.7.0'implementation "androidx.compose.ui:ui:$compose_version"implementation "androidx.compose.material:material:$compose_version"implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'implementation 'androidx.activity:activity-compose:1.3.1'testImplementation 'junit:junit:4.13.2'androidTestImplementation 'androidx.test.ext:junit:1.1.3'androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"// dagger -hiltimplementation "com.google.dagger:hilt-android:2.38.1"kapt "com.google.dagger:hilt-android-compiler:2.38.1"kapt "androidx.hilt:hilt-compiler:1.0.0"// Lifecycle componentsimplementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion"implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.4.0"implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion"implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion"// Kotlin componentsimplementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines"// networkingimplementation 'com.squareup.retrofit2:retrofit:2.9.0'implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'implementation("com.squareup.okhttp3:okhttp:4.9.0")implementation("com.squareup.okhttp3:logging-interceptor:4.9.0")implementation "com.squareup.moshi:moshi-kotlin:$moshi_version"kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"// coilimplementation("io.coil-kt:coil-compose:1.4.0")
}

三、settings和build组合搭配方式

(1)settings.gradle全局配置,根build.gradle不做配置

  • gradle.properties配置全局变量 

  • settings.gradle配置文件

pluginManagement {/*** The pluginManagement.repositories block configures the* repositories Gradle uses to search or download the Gradle plugins and* their transitive dependencies. Gradle pre-configures support for remote* repositories such as JCenter, Maven Central, and Ivy. You can also use* local repositories or define your own remote repositories. The code below* defines the Gradle Plugin Portal, Google's Maven repository,* and the Maven Central Repository as the repositories Gradle should use to look for its* dependencies.*/repositories {gradlePluginPortal()google()mavenCentral()}resolutionStrategy {}plugins{//是用来构建 apk 的 gradle 插件id 'com.android.application' version '${agpVersion}' apply false//是用来构建 Android Library 的 gradle 插件 (jar, aar)id 'com.android.library' version '${agpVersion}' apply false// 一个Gradle插件,用于将所有依赖项比如lib文件下依赖的jar包和项目代码打包到单个Jar文件中  官方地址[https://plugins.gradle.org/plugin/com.github.johnrengelman.shadow#groovy-usage]id 'com.github.johnrengelman.shadow' version "${agpShadow}" apply false}}
dependencyResolutionManagement {/*** The dependencyResolutionManagement.repositories* block is where you configure the repositories and dependencies used by* all modules in your project, such as libraries that you are using to* create your application. However, you should configure module-specific* dependencies in each module-level build.gradle file. For new projects,* Android Studio includes Google's Maven repository and the Maven Central* Repository by default, but it does not configure any dependencies (unless* you select a template that requires some).*//** * RepositoriesMode.PREFER_PROJECT : 解析依赖库时 , 优先使用本地仓库 , 本地仓库没有该依赖 , 则使用远程仓库 ;* RepositoriesMode.FAIL_ON_PROJECT_REPOS : 解析依赖库时 , 强行使用远程仓库 , 不管本地仓库有没有该依赖库 ;* */repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {google()mavenCentral()flatDir {dirs 'libs'}}}rootProject.name='TestAndroidProject'
include ':AliPay'
include ':app'
  • 根目录build.gradle文件


plugins{//是用来构建 apk 的 gradle 插件id 'com.android.application' apply false//是用来构建 Android Library 的 gradle 插件 (jar, aar)id 'com.android.library' apply false// 一个Gradle插件,用于将所有依赖项比如lib文件下依赖的jar包和项目代码打包到单个Jar文件中  官方地址[https://plugins.gradle.org/plugin/com.github.johnrengelman.shadow#groovy-usage]id 'com.github.johnrengelman.shadow' apply false
}task clean(type: Delete) {delete rootProject.buildDir
}

(2)根build.gradle配置,setting.gradle仅配置基础

  • settings.gradle配置

rootProject.name='WiFiAndroidProject'
include ':DashboardView'
include ':BluetoothKitlibrary'
include ':niftydialogeffectslibrary'
include ':TwinklingRefreshLayout_library'
include ':AliPay'
include ':app'
  • build.gradle配置

//通常定义了项目中的模块使用的通用插件版本
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {repositories {gradlePluginPortal()google()mavenCentral()jcenter()maven { url 'https://repo1.maven.org/maven2/' }
//}dependencies {//配置gradle插件classpath "com.android.tools.build:gradle:8.1.0"}}
allprojects {repositories {flatDir {dirs 'libs'}flatDir {dirs project(':AliPay').file('libs')}google()mavenCentral()maven { url 'https://jitpack.io' }maven { url 'https://repo1.maven.org/maven2/' }}
}
task clean(type: Delete) {delete rootProject.buildDir
}

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

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

相关文章

【excel技巧】单元格内的公式如何隐藏?

Excel文件中最重要的除了数据还有就是一些公式了,但是只要点击单元格,公式就能显示出来,如果不想别人看到公式应该如何设置呢?今天分享隐藏excel单元格数据的方法。 选中单元格,点击右键打开【设置单元格格式】&#x…

电脑显示找不到mfc140.dll怎么办?哪个修复方法值得推荐

在电脑使用过程中,我们经常会遇到一些错误提示,例如"mfc140.dll文件缺失"这个问题可能会导致某些应用程序无法正常运行,可能给您带来困扰。本篇文章为您提供了六种有效解决此类问题的策略,使您能够迅速修复并恢复应用程…

一篇文章带你了解Python常用自动化测试框架 —— Pytest

在之前的文章里我们已经学习了Python自带测试框架UnitTest,但是UnitTest具有一定的局限性 这篇文章里我们来学习第三方框架Pytest,它在保留了UnitTest框架语法的基础上有着更多的优化处理 下面我们将从以下角度来介绍Pytest: Pytest基本介绍…

mac系统安装docker desktop

Docker的基本概念 Docker 包括三个基本概念: 镜像(Image):相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。比如说nginx,mysql,redis等软件可以做成一个镜像。容器&#…

什么是高防CDN?有什么优势?

德迅高防CDN技术概述 随着互联网的快速发展,网络安全问题越来越受到人们的关注。高防CDN(Content Delivery Network)作为一种有效的网络安全防御手段,在企业和个人网站中得到了广泛应用。本文将详细介绍高防CDN的技术原理、防御原理、优点和应用场景&am…

如何验证命令执行漏洞(无回显)

如何验证命令执行漏洞(无回显) 使用yakit,选择dnslog模块 点击生成一个可用域名 以dvwa为例 命令执行ping一下刚才的域名 随后yakit中会出现回显信息,以此证明拥有命令执行漏洞 信息,以此证明拥有命令执行漏洞

【Java】乡镇卫生院、社区卫生服务中心云HIS源码

云HIS采用云端SaaS服务的方式提供,用户通过浏览器即能访问,无需关注系统的部署、维护、升级等问题,系统充分考虑了模板化、配置化、智能化、扩展化等设计方法,覆盖了基层医院机构的主要工作流程,能够与监管系统有序对接…

TensorFlow实战教程(十八)-Keras搭建卷积神经网络及CNN原理详解

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章详细讲解了Keras实现分类学习,以MNIST数字图片为例进行讲解。本篇文章详细讲解了卷积神经网络CNN原理,并通过Keras编写CNN实现了MNIST分类学习案例。基础性文章,希望对您有所帮助! 一…

vite vue3配置axios

准备 参考 安装axios yarn add axios中文官网 src下新建request文件夹,该文件下新建index.ts import axios from axios; import { ElMessage } from element-plus;// const errorCodeType function (code: number): string { // let errMessage: string 未知…

一阶低通滤波器(一阶巴特沃斯滤波器)

连续传递函数G(s) 离散传递函数G(z) 转换为差分方程形式 一阶巴特沃斯滤波器Filter Designer参数设计:参考之前的博客Matlab的Filter Designer工具设计二阶低通滤波器 设计采样频率100Hz,截止频率20Hz。 注意:设计参数使用在离散系统中&…

【性能测试】稳定性/并发压力测试的TPS计算+5W并发场景设计...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、稳定性测试TPS…

AI生成技术威胁版权保护,水印技术和法律完善是关键/安圭拉小岛以.ai域名注册赚得3000万美元 |魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件🔥,更新AIGC的最新动态,生成相应的魔法简报,节省阅读时间👻 🔥资讯预览 AI生成技术威胁版权保护,水印技术和法律完善是关键 Sam Altman对…

软件外包开发的验收流程

软件外包开发的验收流程是确保项目符合预期标准并满足客户需求的关键步骤。以下是一个通用的软件外包开发验收流程,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.明确验收标准: 在项目…

jmeter接口自动化部署jenkins教程详解

首先,保证本地安装并部署了jenkins,jmeter,xslproc 我搭建的自动化测试框架是jmeterjenkinsxslproc 注意:原理是,jmeter自生成的报告jtl文件,通过xslproc工具,再结合jmeter自带的模板修改&…

【C语言】条件变量(pthread_cond_t)

一、概述 条件变量(pthread_cond_t)是POSIX线程(也称为pthread)库中用于线程同步的一种机制。在多线程程序中,条件变量通常与互斥锁(pthread_mutex_t)一起使用,以防止并发问题,如竞态条件和死锁。 二、条件变量(pthre…

渲染器之挂载与更新

讲解渲染器的核心功能:挂载与更新。 1、挂载子节点和元素的属性 当 vnode.children 的值是字符串类型时,会把它设置为元素的文本内容。一个元素除了具有文本子节点外,还可以包含其他元素子节点,并且子节点可以是很多个。为了描述…

IonQ、Rigetti、D-Wave公布2023年第三季度财报!

近期,量子计算公司Rigetti、IonQ和D-Wave均公布了各自在2023年第三季度的盈利收益。 这三家公司在近期均实现了收入增长,并助力客户实现相应的业务增长。然而,在追求实现量子霸权和超越经典硅基计算机系统的同时,这些公司仍面临着…

ECharts零基础使用思路 图表案例网站推荐

1、用npm安装echarts npm i echarts -S 2、引入 (1)可以在mian.js里全局引入 import echarts from ‘echarts’ Vue.prototype.$echarts echarts 将echarts挂载在Vue原型上 用时直接this.$echarts即可 (2)也可以在组件中按需引入…

安卓毕业设计:基于安卓android微信小程序的在线医生答疑系统

项目介绍 在线医生答疑开发使系统能够更加方便快捷,同时也促使在线医生答疑变的更加系统化、有序化。系统界面较友好,易于操作。具体在系统设计上,客户端使用微信开发者,后台也使用java技术在动态页面上进行了设计,My…

AR眼镜方案—单目光波导AR智能眼镜

光波导技术是一项具有前沿意义的技术,它能够将光线反射180度,使得眼镜框架内置的MicroLED屏幕的图像通过多次反射与扩散后准确地传递到人眼中。采用MicroLED显示技术的AR智能眼镜不仅体积显著缩小,屏幕只有0.68英寸大小,并且还能够…