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

news2024/11/20 10:31:26

一、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的repositories
        google()
        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 false
    id 'com.android.library' version '7.1.0-rc01' apply false
    id '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
    // 表示你的项目可以使用低于(或等于)该版本的所有API
    compileSdk 32
 
    // 定义默认配置
    defaultConfig {
        // 工件ID
        applicationId "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 false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
 
    // 如果你用的是JDK8,那么请添加这个两个配置以提供支持
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility 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 -hilt
    implementation "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 components
    implementation "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 components
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines"
 
    // networking
    implementation '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"
    // coil
    implementation("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.coloradmin.cn/o/1225589.html

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

相关文章

gRPC 四模式之 双向流RPC模式

双向流RPC模式 在双向流 RPC 模式中,客户端以消息流的形式发送请求到服务器端,服务器端也以消息流的形式进行响应。调用必须由客户端发起,但在此之后,通信完全基于 gRPC 客户端和服务器端的应用程序逻辑。 为什么有了双向流模式…

Codeforces Round #909 (Div. 3)

A. Game with Integers 签到题,但是本蒟蒻11分钟才AC,主要还是英文题面不熟练,题目中加粗了after,只有下一步操作之后能被整除才胜利。 英文题面的加粗单词很重要,注意提高签到题速度。 B. 250 Thousand Tons of TNT…

leetcoe刷题日志-6N字形变换

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下: 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串&#…

【数据结构】图的存储结构(邻接矩阵)

一.邻接矩阵 1.图的特点 任何两个顶点之间都可能存在边,无法通过存储位置表示这种任意的逻辑关系。 图无法采用顺序存储结构。 2.如何存储图? 将顶点与边分开存储。 3.邻接矩阵(数组表示法) 基本思想: 用一个一维数…

公共字段自动填充-Mybatis Plus实现

简历描述 使用ThreadLocal动态获取当前登录用户,从而解决MybatisPlus公共字段自动填充问题。达到简化编码的目的,使业务方法更加简洁。 问题分析 前面我们已经完成了后台系统的员工管理功能的开发,在新增员工时需要设置创建时间、创建人、…

Mol-Instructions:大模型赋能,药物研发新视野

论文标题:Mol-Instructions: A Large-Scale Biomolecular Instruction Dataset for Large Language Models 论文链接: https://arxiv.org/pdf/2306.08018.pdf Github链接: https://github.com/zjunlp/Mol-Instructions 模型下载&#xf…

Java 省考试院自学考试考籍管理系统

1) 项目简介 考籍管理系统是省考试院自学考试管理系统的一部分,包括考生考籍档案管理、考生免考管理、课程顶替、考籍转入转出管理、毕业管理和日志管理等功能模块。该项目的建设方便和加强了省考试院对自学考试考籍的一系列管理操作,社会效应明显。…

<MySQL> 如何合理的设计数据库中的表?数据表设计的三种关系

目录 一、表的设计 二、一对一关系 三、一对多关系 四、多对多关系 一、表的设计 数据库设计就是根据需要创建出符合需求的表。 首先根据需求找到体系中的关键实体对象,通常每个实体对象都会有一个表,表中包含了这个实体的相关属性。 再理清楚实体对…

【Linux网络】详解使用http和ftp搭建yum仓库,以及yum网络源优化

目录 一、回顾yum的原理 1.1yum简介 yum安装的底层原理: yum的好处: 二、学习yum的配置文件及命令 1、yum的配置文件 2、yum的相关命令详解 3、yum的命令相关案例 三、搭建yum仓库的方式 1、本地yum仓库建立 2、通过http搭建内网的yum仓库 3、…

Sa-Token 整合Java17和SpringBoot

目录 前言引入项目开启登录认证路由拦截鉴权解决兼容问题总结 前言 之前无意中发现Sa-Token权限认证框架,项目十分好用。 项目地址: https://github.com/dromara/sa-token 官网地址: https://sa-token.cc/doc.html#/start/example 我的个人…

64位ATT汇编语言使用bss段.skip指令储存字符,并使用系统调用输出字符

.global main .section .data .section .bss# 需要输出的字符数组,还没有初始化mystring: .skip 4 .section .text main:# 将mystring这个字符串的地址存入到rbx寄存器中leaq mystring,%rbx# 将a放入到mystring第一个字节里边movb $a,(%rbx)# 将地址往后边移动一个字…

C语言的由来与发展历程

C语言的起源可以追溯到上世纪70年代,由Dennis Ritchie在贝尔实验室开发出来。C语言的设计目标是提供一种简洁、高效、可移植的编程语言,以便于开发底层的系统软件。在那个时代,计算机技术正在迅速发展,出现了多种高级编程语言&…

Python接口自动化测试之token参数关联!

前言 在做自动化接口测试时,有时候会遇到token的动态关联,例如查询余额接口,需要关联登录接口的token动态值,如何利用python脚本进行接口token关联呢?今天我们爱学习一下吧! 一:获取登录接口返回的token…

掌握深度学习利器——TensorFlow 2.x实战应用与进阶

掌握深度学习利器——TensorFlow 2.x实战应用与进阶 摘要:随着人工智能技术的飞速发展,深度学习已成为当下最热门的领域之一。作为深度学习领域的重要工具,TensorFlow 2.x 备受关注。本文将通过介绍TensorFlow 2.x的基本概念和特性&#xff…

面向未来的自动化:拥抱机器人即服务(RaaS)

01. RaaS是什么? 对于希望实现业务流程自动化的公司来说,机器人通常是一笔巨大的资本支出。由于机器人非常昂贵,公司可能需要等待数年才能看到投资回报。正是由于这一现实,许多较小的组织无法投资机器人。 但一些机器人公司正在采…

2023.11.18 每日一题(AI自生成应用)【C++】【Python】【Java】【Go】 动态路径分析

目录 一、编程挑战:动态时间序列分析 实际应用: 实现提示: 二、实现 1. C 2. Python 3. JAVA 4. Go 一、编程挑战:动态时间序列分析 问题描述: 假设你是一名软件工程师,需要开发一个应用来分析和预…

springboot项目中获取业务功能的导入数据模板文件

场景: 在实际业务场景中,经常会遇到某些管理功能需要数据导入共功能,但既然是导入数据,肯定会有规则限制,有规则就会有数据模板,但这个模板一般是让客户自己下载固定规则模板,而不是让客户自己随便上传模板。下面介绍直接下载模板 一、下载模板示例 1、在项目的…

最短路问题

单源最短路 Dijkstra算法 力扣 743.网络延迟时间 const int N 7777; int INF 0x3f3f3f3f; class Solution {struct edge {int v, w;};vector<edge> e[N];int d[N], vis[N]; //d数组存储最短路径长度priority_queue <pair<int, int>, vector<pair<int…

栈的实现及OJ练习(c语言)

目录 前言 栈 栈的实现&#xff08;数组栈&#xff09; 初始化栈 入栈 出栈 获取栈顶元素 获取栈中有效元素个数 检测栈是否为空 销毁栈 最终代码&#xff1a; 选择练习 栈的OJ题 前言 我们在之前已经学习了顺序表和链表的概念&#xff0c;它们有这样的优缺点&a…

周年纪念篇

一周年纪念&#xff01; 凌晨逛手机版csdn时才突然发现已经错过一周年了&#xff0c;但我当闰年来纪念一下不过分吧hhh 浅浅的整些怀念的东西吧&#xff01; 这是人生第一段代码&#xff1a;不是hello world写不起&#xff0c;而是纯爱单推人更有性价比。 有这段代码在&#x…