Android Gradle模块依赖替换使用技巧
作者:汪海游龙 时间:2021-07-03 20:22:53
背景
我们在多模块项目开发过程中,会遇到这样的场景,工程里依赖了一个自己的或者其他同事的 aar
模块,有时候为了开发调试方便,经常会把 aar
改为本地源码依赖,开发完毕并提交的时候,会再修改回 aar
依赖,这样就会很不方便,开发流程图示如下:
解决
一开始我们通过在 app
的 build.gradle
里的 dependency
判断如果是需要本地依赖的 aar
,就替换为 implementation project
依赖,伪代码如下:
dependencies {
if(enableLocalModule) {
implementation 'custom:test:0.0.1'
} else {
implementation project(path: ':test')
}
}
这样就可以不用每次提交代码还要修改回 aar
依赖,但是如果其他模块如果也依赖了该 aar
模块,就会出现问题,虽然可以继续修改其他模块里的依赖方式,但是这样就会有侵入性,而且不能彻底解决问题,仍然有可能出现本地依赖和 aar
依赖的代码不一致问题。
Gradle 官方针对这种场景提供了更好的解决方式 DependencySubstitution
,使用方式如下:
步骤1:
在 settting.gradle
,添加如下代码:
// 加载本地 module
if (file("local.properties").exists()) {
def properties = new Properties()
def inputStream = file("local.properties").newDataInputStream()
properties.load( inputStream )
def moduleName = properties.getProperty("moduleName")
def modulePath = properties.getProperty("modulePath")
if (moduleName != null && modulePath != null) {
include moduleName
project(moduleName).projectDir = file(modulePath)
}
}
步骤2:
在 app
的 build.gradle
添加以下代码
configurations.all {
resolutionStrategy.dependencySubstitution.all { DependencySubstitution dependency ->
// use local module
if (dependency.requested instanceof ModuleComponentSelector && dependency.requested.group == "custom") {
def targetProject = findProject(":test")
if (targetProject != null) {
dependency.useTarget targetProject
}
}
}
}
步骤3:
在 local.properties
里
moduleName=:test
modulePath=../AndroidStudioProjects/TestProject/testModule
到这里就大功告成了,后续只需要在 local.properties
里开启和关闭,即可实现 aar
模块本地依赖调试,提交代码也不用去手动修改回 aar
依赖。
来源:https://juejin.cn/post/7062642189154648101
标签:Android,Gradle,模块,依赖替换
0
投稿
猜你喜欢
flutter中使用流式布局示例详解
2023-08-24 23:49:06
Java Maven依赖传递,可选依赖,排除依赖详解
2022-06-09 14:24:14
如何基于java实现Gauss消元法过程解析
2023-12-15 21:51:08
Java中实现简单的Excel导出
2021-10-21 07:23:25
IDEA无法使用Git Pull的问题
2023-05-04 10:55:39
SpringBoot如何实现分离资源文件并打包
2023-02-18 12:01:49
C#队列Queue用法实例分析
2023-02-27 22:35:14
Java实现简单的抽牌游戏
2022-10-06 11:55:01
Java中synchronized的优化措施
2022-10-09 18:19:05
C#实现启用与禁用本地网络的方式小结【3种方式】
2022-04-21 18:45:14
Android日期显示和日期选择库
2021-09-04 10:54:17
SpringBoot接口中如何直接返回图片数据
2023-04-22 13:10:24
C的|、||、&、&&、异或、~、!运算符
2022-05-30 13:10:30
Idea导入eureka源码实现过程解析
2023-06-11 11:52:24
深入探究Java线程的状态与生命周期
2021-10-01 17:44:10
Java使用Redis实现秒杀功能
2023-04-11 11:26:54
java实现五子棋小游戏
2021-12-25 06:58:56
Android手机闹钟服务AlarmManagerk开发案例
2023-05-21 14:15:28
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2022-06-10 04:17:53
Android实现EditText的富文本编辑
2022-04-14 21:44:29