当前位置:网站首页>Androd Gradle 对其使用模块依赖的替换
Androd Gradle 对其使用模块依赖的替换
2022-07-03 00:55:00 【小陈乱敲代码】
背景
我们在多模块项目开发过程中,会遇到这样的场景,工程里依赖了一个自己的或者其他同事的 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 依赖。
尾声
一转眼时间真的过的飞快。我们各奔东西,也各自踏上了自己的旅途,但是即使多年不见,也因为这份情谊我们依旧如从前那般“亲密”。不忘初心方得始终。加油吧,程序员们,在我看来35岁,40岁从来不是危机,只要永远不要忘记自己为何踏上征程!
最后需要同款资料的,可以 私信我回复【学习】或者扫描下方二维码我愿意分享给你!
为了让更多在学习中或者最近要准备面试的朋友们看到这篇文章,希望你们能多多评论,点赞+转发!
**再次感谢所有给我提供过题目的朋友们,感谢一路有你!
边栏推荐
- [AUTOSAR eight OS]
- 数据分析思维分析犯法和业务知识——分析方法(一)
- 2022 Jiangxi Provincial Safety Officer B certificate reexamination examination and Jiangxi Provincial Safety Officer B certificate simulation examination question bank
- JDBC courses
- Matlab Doppler effect produces vibration signal and processing
- Kivy教程大全之如何在 Kivy 中创建下拉列表
- Telephone network problems
- 删除有序链表中重复的元素-II
- 2022 coal mine gas drainage examination question bank and coal mine gas drainage examination questions and analysis
- 【C语言】分支和循环语句(上)
猜你喜欢

Infrared thermography temperature detection system based on arm rk3568

excel去除小数点后面的数据,将数字取整

Correctly distinguish the similarities and differences among API, rest API, restful API and web service

正确甄别API、REST API、RESTful API和Web Service之间的异同
![leetcode:871. Minimum refueling times [Pat has done before + maximum stacking + greed]](/img/2c/8ec3926243fac8db9ed45d8053f3af.png)
leetcode:871. Minimum refueling times [Pat has done before + maximum stacking + greed]

excel表格计算时间日期的差值,并转化为分钟数

RISA rz/g2l processor introduction | frame diagram | power consumption | schematic diagram and hardware design guide

异步、邮件、定时三大任务
![[AUTOSAR nine c/s principle Architecture]](/img/59/ce32c0ff58ef5d8385fe950136175b.png)
[AUTOSAR nine c/s principle Architecture]

信息熵的基础
随机推荐
JS inheritance and prototype chain
解决ReactNative使用webView存在缓存问题
攻克哈希的基本概念与实现
The arm core board / development board of Feiling equipped with Ti am62x made its debut in embedded world 2022
Excel removes the data after the decimal point and rounds the number
Delete duplicate elements in the ordered linked list -ii
(C language) data storage
有向图的强连通分量
How wide does the dual inline for bread board need?
leetcode 6103 — 从树中删除边的最小分数
[AUTOSAR 11 communication related mechanism]
[AUTOSAR + IO Architecture]
Find a benchmark comrade in arms | a million level real-time data platform, which can be used for free for life
Embrace the safety concept of platform delivery
MySQL foundation 04 MySQL architecture
按键精灵打怪学习-回城买药加血
465. 最优账单平衡 DFS 回溯
【系统分析师之路】第五章 复盘软件工程(开发模型开发方法)
异步、郵件、定時三大任務
12_ Implementation of rolling automatic video playback effect of wechat video number of wechat applet