前言

前段时间自己在搭建组件化框架时候遇到了多人协作 Moudle 版本依赖冲突以及重复导包和同一个包导入不同版本的情况,针对这个问题对依赖统一这块做了一次比较详细的学习和总结

目前Android依赖统一管理的方式有以下几种方式,接下来我们一起慢慢分析一下各种方式优缺点

    1. groovy ext扩展函数(也有称之为:“循环优化”)
    1. kotlin+buildSrc
    1. composing builds
    1. catalog
    1. 自定义插件+includeBuild

Groovy ext扩展函数

这种方式可能是大家最开始或者说是比较常见的一种依赖配置方式:

示例代码

然后在项目根build.gradle(即root路径下)

apply from:"config.gradle"

引入的方式有两种一种是循环遍历:

总结:

优点:

1:后续添加依赖不需要改动build.gradle,直接在config.gradle

2:精简了build.gradle的长度

缺点:

1:不支持代码提醒

2:不支持点击跳转

3:多moudle 开发时,不同module的依赖需要ctrl+c/v 导致开发的效率降低

kotlin+buildSrc

buildSrc

The directory buildSrc is treated as an included build. Upon discovery of the directory, Gradle automatically compiles and tests this code and puts it in the classpath of your build script. For multi-project builds there can be only one buildSrc directory, which has to sit in the root project directory. buildSrc should be preferred over script plugins as it is easier to maintain, refactor and test the code.

这是来自gradle官方文档对buildSrc的解释:

当运行 Gradle 时会检查项目中是否存在一个名为 buildSrc 的目录。然后 Gradle 会自动编译并测试这段代码,并将其放入构建脚本的类路径中, 对于多项目构建,只能有一个 buildSrc 目录,该目录必须位于根项目目录中, buildSrc 是 Gradle 项目根目录下的一个目录,它可以包含我们的构建逻辑,与脚本插件相比,buildSrc 应该是首选,因为它更易于维护、重构和测试代码

通过上面的介绍,大家或许对buildsrc 有一定理解了,那么我们就看下他怎么和kotlin一起使用达到项目统一依赖管理的

如上图所示我们首先创建一个名为buildSrc的module,gradle 构建的时候会先检查工程中是否有buildSrc命名的目录然后会自动编译和测试这段代码并写入到构建脚本的类路径中,所以无需在setting.gradle 做任何配置有关buildSrc的配置信息

官方的配置信息

这是我的项目中配置信息

这种方式管理依赖优点和缺点如下:

优点:

  • 1:但这种方式支持IDE,输入代码会有提示,会自动完成,所以非常推荐使用这种方式来管理项目中的依赖包
  • 2:支持 AndroidStudio 单击跳转
  • 3:buildSrc是Android默认插件,全局只有这一个地方可以修改

缺点:

来自gradle文档

A change in buildSrc causes the whole project to become out-of-date. Thus, when making small incremental changes, the --no-rebuild command-line option is often helpful to get faster feedback. Remember to run a full build regularly or at least when you’re done, though.

更改buildSrc会导致整个项目过时。因此,在进行小的增量更改时,–no-rebuild命令行选项通常有助于获得更快的反馈。不过,请记住定期或至少在完成后运行完整构建。

从官网的解释我们可以得出结论:

buildSrc 是对全局的所有 module 的配置依赖更新会重新构建整个项目,项目越大,重新构建的时间就越长,造成不必要的时间浪费。

阅读到这里我们可能会思考那么有没有一种方式是在部分module 需要修改依赖版本的时候而不会重新构建整个项目的方式呢,探索极致是每一个研发人员毕生所追求的,那么includeBuild这种方式应运而生

composing builds

那么我们开始一步一步实现这种方式:

1:首先创建一个library 的module <对于使用kotlin 或者 java>就要看自己的比较中意哪种语言喽

2:就是在library 配置插件等信息

apply plugin: 'kotlin'
apply plugin: 'java-gradle-plugin'buildscript {repositories {// https://developer.aliyun.com/mvn/guide//todo error:"Using insecure protocols with repositories, without explicit opt-in,"google()mavenCentral()maven { url 'https://maven.aliyun.com/repository/public' }maven { url 'https://maven.aliyun.com/repository/google' }maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }}dependencies {// 因为使用的 Kotlin 需要需要添加 Kotlin 插件classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21"}
}repositories {// 需要添加 jcenter 否则会提示找不到 gradlePluginrepositories {google()mavenCentral()maven { url 'https://maven.aliyun.com/repository/public' }maven { url 'https://maven.aliyun.com/repository/google' }maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }}}dependencies {implementation gradleApi()implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
}compileKotlin {kotlinOptions {jvmTarget = "1.8"}
}compileTestKotlin {kotlinOptions {jvmTarget = "1.8"}
}gradlePlugin{plugins {version{// 在 app 模块需要通过 id 引用这个插件id = 'com.bimromatic.version.plugin'// 实现这个插件的类的路径implementationClass = 'com.bimromatic.plugin.VersionPlugin'}}
}

3:在项目路径下建立一个在.gradle 配置的类名实现_Plugin_ 这个接口

/** Copyright 2009 the original author or authors.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**      http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/
package org.gradle.api;/*** <p>A <code>Plugin</code> represents an extension to Gradle. A plugin applies some configuration to a target object.* Usually, this target object is a {@link org.gradle.api.Project}, but plugins can be applied to any type of* objects.</p>** @param <T> The type of object which this plugin can configure.*/
public interface Plugin<T> {/*** Apply this plugin to the given target object.** @param target The target object*/void apply(T target);
}

4:在settings.gradle添加

5:在需要用的地方添加插件名

详细配置请移步我们的项目查看

因为时间的原因,这次项目管理依赖就讲到这里,后续会把google在孵化器期 Catalog统一配置依赖版本 讲解一下,然后我们再把各种依赖管理方式用在编辑器跑一下试试看看那种方式构建速度最快。

如果你们觉得写得不错的随手给我点个关注,后期会持续做移动端技术文章的分享,或者给我的github 点个start 后期会上传一些干货。

对了如果文章中有讲的什么不对的地方咱们评论区见,或者提上你们宝贵的issue

最后

按照国际惯例,给大家分享一套十分好用的Android进阶资料:《全网最全Android开发笔记》。

整个笔记一共8大模块、729个知识点,3382页,66万字,可以说覆盖了当下Android开发最前沿的技术点,和阿里、腾讯、字节等等大厂面试看重的技术。

因为所包含的内容足够多,所以,这份笔记不仅仅可以用来当学习资料,还可以当工具书用。

如果你需要了解某个知识点,不管是Shift+F 搜索,还是按目录进行检索,都能用最快的速度找到你要的内容。

相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照整个知识体系编排的。

(一)架构师必备Java基础

1、深入理解Java泛型

2、注解深入浅出

3、并发编程

4、数据传输与序列化

5、Java虚拟机原理

6、高效IO

……

(二)设计思想解读开源框架

1、热修复设计

2、插件化框架设计

3、组件化框架设计

4、图片加载框架

5、网络访问框架设计

6、RXJava响应式编程框架设计

……

(三)360°全方位性能优化

1、设计思想与代码质量优化

2、程序性能优化

  • 启动速度与执行效率优化
  • 布局检测与优化
  • 内存优化
  • 耗电优化
  • 网络传输与数据储存优化
  • APK大小优化

3、开发效率优化

  • 分布式版本控制系统Git
  • 自动化构建系统Gradle

……

(四)Android框架体系架构

1、高级UI晋升

2、Android内核组件

3、大型项目必备IPC

4、数据持久与序列化

5、Framework内核解析

……

(五)NDK模块开发

1、NDK开发之C/C++入门

2、JNI模块开发

3、Linux编程

4、底层图片处理

5、音视频开发

6、机器学习

……

(六)Flutter学习进阶

1、Flutter跨平台开发概述

2、Windows中Flutter开发环境搭建

3、编写你的第一个Flutter APP

4、Flutter Dart语言系统入门

……

(七)微信小程序开发

1、小程序概述及入门

2、小程序UI开发

3、API操作

4、购物商场项目实战

……

(八)kotlin从入门到精通

1、准备开始

2、基础

3、类和对象

4、函数和lambda表达式

5、其他

……

好啦,这份资料就给大家介绍到这了,有需要详细文档的小伙伴,可以微信扫下方二维码免费领取哈~

Android - 依赖统一管理相关推荐

  1. Android组件化下依赖统一管理

    使用Gradle进行依赖统一管理 前言 依赖统一管理使用步骤 第一步:定义versions.gradle文件 第二步:编辑版本内容 第三步:在project的build.gradle进行引用我们新建的 ...

  2. Gradle7.0,依赖统一管理的全新方式,了解一下~

    作者 | RicardoMJiang 来源 | https://juejin.cn/post/6997396071055900680 我估计用到这么高版本的同学非常少,大家可以简单了解下,做个收藏,未 ...

  3. composingBuild依赖统一管理实践

    前言 接上文buildSrc使用,依赖统一管理,这次是用的自定义plugin实现的.和buildSrc差不多,又有细微差别 新建versionPlugin文件 把文件拷贝进去 关于VersionCon ...

  4. AndroidStudio Gradle依赖统一管理

    AndroidStudio由于使用了gradle的进行项目构建,使我们开发app方便很多,今天我就给大家列出几点是用gradle的方便之处. 一.AndroidStudio Gradle第三依赖统一管 ...

  5. AndroidStudio Gradle第三依赖统一管理(by 星空武哥)

    转载请标注原创地址:http://blog.csdn.net/lsyz0021/article/details/54377150 AndroidStudio由于使用了gradle的进行项目构建,使我们 ...

  6. android studio管理依赖,Android Studio 中的 Gradle 依赖统一管理

    在我们的实际项目开发中,通常在一个 Project 项目中会存在多个 Module 的情况,在这些 Module 中会存在一些相同的版本依赖配置,针对进行版本升级的时候需要逐个修改,显得特别麻烦,所以 ...

  7. gradle第三方Jar包依赖统一管理

    1. 背景 一个gradle的工程中往往包含很多的子工程,每个子工程都有其自己的Jar包依赖.现实情况是各个子工程对jar包的引入都是比较随意的,版本号各式各样,如何统一各个子工程的版本号?统一管理第 ...

  8. Composing builds 依赖统一管理实践

    1 参与文章 添加链接描述 一直import 不成功 后参考 https://blog.csdn.net/qq_16692517/article/details/112991736 后来 查资料 最终 ...

  9. Android Studio配置统一管理依赖版本号引用

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本Demo采用的是其中一个方案,其他方案请阅读参考资料<Android Studio中统一管理版本号引用配置> 使用步骤 ...

最新文章

  1. u盘安装ubuntu10.04 、11.04 server
  2. jwt同一会话_在会话中使用JWT
  3. 从决策树到xgboost(二)
  4. JDK源码解析之 Java.lang.Compiler
  5. 排序(python)
  6. 对FreeMarker技术的思考
  7. 《麦肯锡方法》第11章 用图表说明问题-思维导图
  8. java8新特性 函数式编程 Lamda
  9. 鞠今日截语2014.05.11火星合月
  10. 多进程中之文件描述符继承的消除
  11. 盘点一道使用Python编程来实现高斯计算的基础算术题目
  12. python飞机大战爆炸效果实现_python飞机大战添加爆炸效果
  13. vc禁止标题栏拖动窗口
  14. android 工程模式设置中文翻译,进工程模式的方法及翻译,转来的
  15. C语言 typedef 关键字
  16. 磁感应强度B与磁场强度H的区别,联系与物理意义
  17. 吴恩达机器学习新课程又来了!旁听免费,小白友好
  18. css绘制的灯笼动画js特效
  19. 状态栏电量百分比默认关闭
  20. 点击标签给文本域(Textarea)赋值,文本域支持手动输入

热门文章

  1. 【概率图与随机过程】09 探索EM公式的底层逻辑与由来
  2. Arrays.aslist用法及陷阱
  3. 如何去掉计算机开机指纹,笔记本电脑如何取消指纹登陆_笔记本电脑取消指纹登录的步骤...
  4. 有喜无惊 2013苹果秋季发布会6亮点4遗憾
  5. WPF学习笔记04-控件Control_Part1
  6. xps9360换硬盘_戴尔新一代XPS13-9360的升级真的划算吗?
  7. 【线稿提取】胡桃桃那么可爱,那就“手绘”个胡桃摇吧~
  8. 螺栓RFID标签在发动机制造(MES系统)中的应用
  9. 双非渣硕校招总结+Java面经(网易阿里百度等)
  10. 如何在Photoshop利用消失点