Android 使用 Gradle 统一配置依赖管理

Android 使用 Kotlin 重写 Gradle 文件(Kotlin Gradle DSL) 概述 众所周知,我们在 Android Studio 是使用 Gradle 来编译的,Gradle 是一种基于 Groovy 语言的构建工具,我们平时看到的 build.gradle 中的语法结构其实就是 Groovy 提供的 DSL 功能。 DSL 的全称是领域特定语言(Domain Specific Language),它是编程语言赋予开发者的一种特殊能力,通过它我们可以编写出一些看似脱离其原始语法结构的代码,从而构建出一种专有的语法结构。 毫无疑问,Kotlin 是支持 DSL 的,而且 Gradle 阅读详情

       在介绍使用 Gradle 统一配置依赖管理前我们先来简单介绍一下 Gradle, Gradle 是一个基于 JVM 的构建工具,也是一款非常灵活强大的构建工具,支持  jcenter、maven、Ivy 仓库,支持传递性依赖管理(即 A 依赖 B,B 依赖 C,那么 A 也就可以依赖 C,不用再单独去依赖),而不需要远程仓库或者是 pom.xml 和 ivy.xml 配置文件,抛弃了各种繁琐,基于 Groovy,build 脚本使用 Groovy 编写

而在我们的 Android studio 中默认就是使用 Gradle 来构建管理我们的工程的,在我们的工程构建过程中通常会创建很多个 Module 来对我们的工程进行功能以及业务上的解耦(也就是模块化开发),这时候可能就会存在一个问题,就是每个 Module 以及 Module 中一些公用库的依赖可能会出现版本不统一的问题,包括使用的编译版本,SDK 的版本等,导致不能打包,这里可以使用 Gradle 统一配置文件来解决我们的问题

首先我们来看一下,正常情况下我们的项目目录的 build.gradle 情况:

先看 app 下的 build.gradle:

//说明module的类型,com.android.application为程序,com.android.library为库
apply plugin: 'com.android.application'

android {

    //编译的 SDK 版本
    compileSdkVersion 25

    //编译的 Tools 版本
    buildToolsVersion "25.0.2"

    //默认配置
    defaultConfig {

        //应用程序的包名
        applicationId "com.example.qiudengjiao.activitytest"

        //支持 SDK 的最低版本
        minSdkVersion 15

        //支持 SDK 的目标版本
        targetSdkVersion 25

        //版本号
        versionCode 1

        //版本名
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    //build 类型
    buildTypes {
        release {
            //混淆是否开启,返回true则开启
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

//在这里进行库的依赖
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

    testCompile 'junit:junit:4.12'

    //support v7 支持库
    compile 'com.android.support:appcompat-v7:25.1.0'
}


接下来我们再来看一下项目根目录下的 build.gradle:

//构建脚本
buildscript {

    repositories {

        //依赖的仓库
        jcenter()
    }
    dependencies {
        
        //项目依赖的Gradle版本
        classpath 'com.android.tools.build:gradle:2.2.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}



现在我们添加一个 Module 库,来看一下我们 Module 库下的 build.gradle:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        minSdkVersion 13
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.0.0'
    testCompile 'junit:junit:4.12'
}

这里我们来看一下和 app 目录下的 build.gradle 有什么区别:

app 目录下的 build.gradle 是:apply plugin:com.android.application

Module 库下的 build.gradle 是:apply plugin:com.android.library

其它的就是版本的不一样了,要素是一样的,这里就是我们今天着重要来介绍的,这里我们看到编译的 SDK 版本和编译的 Tools 版本以及支持 SDK 的最低版本等的版本号都是不一样的,这里我们就需要来统一,而我们总不能每次都来手动配置,当 Module 增多时则容易出错


解决办法:

方法一

在项目的根目录的 build.gradle 里进行统一配置如下:

/*在根目录中配置公用供子模块调用*/
ext {
    //Android
    compileSdkVersion = 25
    buildToolsVersion = "25.0.2"
    minSdkVersion = 15
    targetSdkVersion = 25

    //Version
    supportLibrary = "25.1.0"

    //supportLibraries dependencies
    supportDependencies = [
            supportAppcompat: "com.android.support:appcompat-v7:${supportLibrary}",
    ]
}

配置完后工程根目录的 build.gradle 情况:

//构建脚本
buildscript {

    repositories {

        //依赖的仓库
        jcenter()
    }
    dependencies {

        //项目依赖的Gradle版本
        classpath 'com.android.tools.build:gradle:2.2.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

/*在根目录中配置公用供子模块调用*/
ext {
    //Android
    compileSdkVersion = 25
    buildToolsVersion = "25.0.2"
    minSdkVersion = 15
    targetSdkVersion = 25

    //Version
    supportLibrary = "25.1.0"

    //supportLibraries dependencies
    supportDependencies = [
            supportAppcompat: "com.android.support:appcompat-v7:${supportLibrary}",
    ]
}

接下来我们在 app 的 build.gradle 中进行调用如下:

apply plugin: 'com.android.application'

android {

    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {

        applicationId "com.example.qiudengjiao.activitytest"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'junit:junit:4.12'
    compile rootProject.ext.supportDependencies.supportAppcompat
}

在 Module 的 build.gradle 中进行调用如下:

apply plugin: 'com.android.library'

android {

    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {

        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'

    compile rootProject.ext.supportDependencies.supportAppcompat
}

这样我们就完成了使用 Gradle 对项目中 app 下的 build.gradle 和 Module 中的 build.gradle 依赖进行统一配置的解决,以此类推,更多的 Module 也是如此配置,以后需要版本的更改我们只需要去根目录 build.gradle 修改即可


方法二

因为每个人都有自己的配置习惯,这里我们再提供一种配置以供大家参考,这里我们在主项目的根目录下创建 config.gradle 来配置需要的相关配置信息如下:


config.gradle 里面的配置信息:

/**
 * 在主项目的根目录下创建config.gradle文件
 * 在这里单独处理统一依赖问题
 * 注意需要在根目录的build.gradle中进行引入
 */
ext {
    android = [
            compileSdkVersion: 25,
            buildToolsVersion: "25.0.2",
            minSdkVersion    : 15,
            targetSdkVersion : 25
    ]

    //Version
    supportLibrary = "25.1.0"

    //supportLibraries dependencies
    supportDependencies = [
            supportAppcompat: "com.android.support:appcompat-v7:${supportLibrary}",
            supportV4       : "com.android.support:support-v4:${supportLibrary}",
            suppoutDesign   : "com.android.support:design:${supportLibrary}"
    ]
}

然后我们需要在根目录的 build.gradle 中把 config.gradle 引入进来,这里特别注意是在根目录的 build.gradle 中引入

引入的代码为:

apply from: "config.gradle" 

引入后的根目录 build.gradle 如下:

//在这里引入config.gradle
apply from: "config.gradle"

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

接下来我们就可以在 Module 中引入使用了,如下:

apply plugin: 'com.android.library'

//android配置
def config = rootProject.ext.android

//相关库依赖
def librarys = rootProject.ext.supportDependencies

android {
    compileSdkVersion config.compileSdkVersion
    buildToolsVersion config.buildToolsVersion

    defaultConfig {
        minSdkVersion config.minSdkVersion
        targetSdkVersion config.targetSdkVersion
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'

    //在这里使用库的依赖
    compile librarys.supportAppcompat
    compile librarys.supportV4
    compile librarys.suppoutDesign
}

到这里我们就成功的引入到了 Module 的 build.gradle 中,以后每个 Module 中的引入都是这样,实现了和方法一 同样的功能,个人感觉第二种更好一点,大家自己选择吧,毕竟各有所好,好了,到这里就给大家分享完了在项目中使用 Gradle 统一配置依赖,希望对大家有用

如有错误请提出,多谢




Android 使用 Kotlin 重写 Gradle 文件(1) 最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。 阅读详情

相关推荐

【生成数据集EXCEL文件】使用生成对抗网络GAN生成数据集:输出生成数据集EXCEL

生成器的任务是接收随机噪声向量作为输入,并尽可能生成与真实数据相似的样本,而判别器则是一个二分类器,旨在区分输入的样本是来自生成器生成的,还是来自真实数据。在训练过程中,生成器和判别器通过对抗学习的方式相互博弈,生成器的目标是生成足以欺骗判别器的样本,而判别器的目标则是尽可能准确地判断样本的真实性。GAN网络在多个领域展现了强大的能力,能够生成与训练数据分布相似的新数据,包括但不限于图像生成、图像风格转换、超分辨率、数据增强、视频生成、自然语言处理、医学图像处理以及游戏与虚拟现实等。

hustef的博客 1521

Kotlin DSL实战:build.gradle.kts中的依赖管理与模块化配置

本文详细介绍了如何使用Kotlin DSL优化build.gradle.kts中的依赖管理与模块化配置,提升Android项目的开发效率。通过类型安全的依赖声明、版本统一管控中心libs.versions.toml以及多模块项目的依赖共享策略,开发者可以避免拼写错误、简化版本管理并加速构建过程。文章还提供了构建缓存配置、依赖下载优化等实战技巧,帮助团队快速迁移到现代Gradle配置方案。

weixin_28745821的博客 361

从零到一:使用阿里云百炼搭建企业级 AI Agent 完全实战手册(2026超详细版)

本文是一份企业级AI Agent构建手册,主要面向企业技术负责人、AI产品经理和后端开发工程师。手册详细介绍了如何在阿里云百炼平台上搭建企业智能体应用的全流程,包括环境准备、知识库构建、智能体创建、工具集成、工作流编排等核心环节。重点内容包括: 准备工作:阿里云账号注册、百炼服务开通、免费额度领取、API Key管理 知识库构建:文档格式要求、内容优化原则、RAG系统搭建 智能体开发:Agent创建、工具集成、复杂业务工作流设计 生产部署:多渠道接入、监控运维、安全治理 成本控制:Token预算管理、选型决

u010323587的专栏 1088

喜欢Ant不喜欢Maven的有福了

有了Ivy的帮忙,我们不需要为了一个库依赖管理功能而舍弃简单的Ant去用复杂的Maven。

Vincent Lee的专栏 3527

通俗讲解清楚光线追踪中的蒙特卡洛积分

彻底讲解光线追踪中的蒙特卡洛积分

qq_37366618的博客 1243

Win 11 Fastboot驱动的详细安装教程

Fastboot驱动的详细安装教程

水w的博客 1万+

解决Hadoop0.21.0 HDFS/MapReduce编译错误(ivy-resolve-common does not find hadoop-commo)

     最近老大安排,要跟踪HDFS ConcatenateFile的前提条件;于是尝试用ant/ivy编译了一下hdfs,提示ivy找不到hadoop-common组件;于是又编译了一下mapreduce,提示ivy找不到hadoop-comm/hadoop-hdfs;编译hadoop-common,提示编译成功;在编译mapreduce错误如下:   ivy-resolve-common...

灰色影子 567

Spring AI Alibaba实战训练营-16 NL2SQL (自然语言转 SQL)应用开发指南

本文介绍了一个基于AI的智能BI应用开发项目,主要实现自然语言转SQL(NL2SQL)功能,包含对话模块、MCP模块、向量数据管理模块。项目采用Spring AI Alibaba框架,集成通义千问大模型,支持内存向量库和AnalyticDB向量数据库两种存储方案。重点展示了chat模块的三个控制器实现:AnalyticNl2SqlController用于生产环境,SimpleChatController适用于开发测试,Nl2sqlForGraphController支持基于图的复杂对话流程。系统通过将业务知

program哲学 1587

Android项目中多Module项目架构以及优雅的解决第三方库依赖问题

Android项目中多Module项目架构以及优雅的解决第三方库依赖问题

weixin_42602900的博客 2820

Linux(31)Rockchip RK3568 Ubuntu22.04上部署 Docker: 问题与解决方案

本博客在总结这些问题及其解决方案,为遇到类似问题的兄弟提供参考,如果我后续有碰到其他Docker 问题也会在此更新补充。

我其实什么都不会 1646

【图像超分】论文精读:Interpreting Super-Resolution Networks with Local Attribution Maps(LAM)

论文题目:Interpreting Super-Resolution Networks with Local Attribution Maps —— 用局部归因图解释超分辨率网络CVPR 2021!必读文章!必须会的可视化手段!很多文章中都会对比LAM!图像超分辨率 (SR) 技术发展迅速,受益于深度网络的发明及其连续突破。然而,众所周知,深度学习和深度神经网络很难解释。SR网络继承了这种神秘的性质,很少有作品试图理解它们。在本文中,我们对 SR 网络进行了归因分析。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 547

解决Android gradle 编译错误

今天编译项目,编译报错。 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:transformClassesWithMultidexlistForInstant_runDebug'. > com.android.build.api.transform.Tr...

Aaronzzq的专栏 2726

将 AMDP Function Implementations 讲透:从 SAP CDS View 表函数到 AMDP 方法的完整实战与最佳实践

AMDP函数实现:连接ABAP与HANA的高效桥梁 本文面向ABAP开发者,详细解析AMDP函数实现技术,帮助在SAP HANA环境中充分发挥数据库算力。核心内容包括: 技术价值:解决复杂计算场景(窗口函数、跨表聚合等)中Open SQL和CDS的局限性 两种实现类型:内部复用函数与CDS表函数实现,对比其声明规则和用途差异 关键语法要点:FOR TABLE FUNCTION绑定、只读约束、参数与返回类型自动生成机制 实战应用:以采购订单聚合为例,展示AMDP在实时报表中的性能优势 完整示例:提供基于航线数

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 386

Android项目Gadle统一依赖管理

直接编写是Android项目工程自带的默认管理方式,在每一个module中都写死了不同依赖及版本号,因此每次升级依赖库时都需要对每一个module做大量的手动更改。Google在Android官方文档中推荐通过使用gradle的extra属性,将依赖及版本号编写到config.gradle配置文件中,每个module都去依赖config.gradle中的版本,从而达到统一管理的目的。ext {libs = [Gradle文档。

XBlithe的博客 3639

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android Studio配置Gradle统一依赖管理

-----为整个Project配置同意的sdk版本----- 1. 在根目录下创建 config.gradle如下: // Gradle统一依赖管理 ext{ ANDROID_COMPILE_SDK_VERSION=24 ANDROID_BUILD_TOOLS_VERSION="24.0.1" ANDROID_BUILD_MIN_SDK_VERSION=15 ANDROID_T

coralline_xss的博客 1426

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Android中依赖版本统一管理

使用config.build文件实现Android中依赖的统一管理

cat_is_so_cute的博客 1208

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Android Gradle 构建配置详解与高级用法

doLast {功能推荐做法依赖管理使用多环境构建buildTypes构建加速parallelcaching版本控制固定版本号,避免项目结构分离配置,统一管理建议新项目优先使用合理使用实现多环境部署持续优化提升开发体验。

csdn_silent的博客 2059

使用config.gradle统一管理项目的依赖

1.新建config.gradle(和项目的build.gradle同级) 2.接着开始配置config.gradle中的内容 //ext:添加额外的属性 //分两个部分来配置:android:目录下的项目的版本、包名、编译版本、等信息 //dependencies:目录下的android support库 我们自己引用的第三方库 ext { android = [ ...

familyyan的博客 894

Android使用Gradle统一配置依赖版本

转自:http://blog.youkuaiyun.com/u014651216/article/details/54602354 前言       目前的Android开发为了减少编译时间,开发效率,大多都采用模块化,组件化的开发方式。 采用这种方式不可避免的将会用到多个Library。 那么当我们协同开发时,如何处理每个人的版本统一呢?       我想大部分人应该都在使用Gra

blueangle17的专栏 757

新手入门MEGA Android开发:Gradle配置与依赖管理实战

MEGA Android App是一款功能强大的云存储应用,本指南将帮助新手开发者快速掌握其Gradle配置与依赖管理技巧,轻松开启Android开发之旅。通过合理配置Gradle,你可以高效管理项目依赖,优化构建流程,提升开发效率。 ## 一、环境准备:从零开始搭建开发环境 在开始MEGA Android项目开发前,确保你的开发环境满足以下要求: - Android Studio Arcti

gitblog_00678的博客 725

20分钟掌握Android Gradle

这样的语法等价于task xxx你可以在任意位置新建一个名为的文本,来练习上面讲述的task定义与依赖。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9rCa6pLz-1614069914710)(https://upload-images.jianshu.io/upload_images/24944255-70205e09a71a2008.png?接着讲 ProjectAndroid│├──app│├──library│││。

2401_85039625的博客 674

Android 使用 Kotlin 重写 Gradle 文件,38岁的中年失业者怎么活下去

下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。希望能够帮助到大家提升技术高级UI,自定义ViewUI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取![外链图片转存中…(img-5sdP9wUB-1712347953467)]

2401_84148974的博客 766

Android 使用 Kotlin 重写 Gradle 文件,android开发实战教程

改造后的代码如下所示: buildscript { val gradle_version = “4.1.3” val kotlin_version = “1.4.31” repositories { google() jcenter() } dependencies { classpath(“com.android.tools.build:gradle:$gradle_version”) classpath(“org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin

m0_64382950的博客 1447

Gradle统一版本配置

增加 config.gradle ext { //android开发版本配置 androidConfig = [ compileSdkVersion: 30, buildToolsVersion: "30.0.3", applicationId : "com.thorn.gradleconfig", minSdkVersion : 23, targetSdkVe

战歌起 971
上一篇: Java static 关键字有那些作用
下一篇: Android View 基础知识
QDJdeveloper
博客等级 码龄11年 108粉丝 49原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值