当前位置:网站首页>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 I overview]
- How to convert Quanzhi a40i/t3 to can through SPI
- Draw love with go+ to express love to her beloved
- Excel calculates the difference between time and date and converts it into minutes
- 安全运营四要素之资产、脆弱性、威胁和事件
- leetcode 2097 — 合法重新排列数对
- 电话网络问题
- Inversion de l'intervalle spécifié dans la liste des liens
- 链表内指定区间反转
- Assets, vulnerabilities, threats and events of the four elements of safe operation
猜你喜欢
MySQL基础用法02
Database SQL language 02 connection query
JS inheritance and prototype chain
Excel if formula determines whether the two columns are the same
[case sharing] let the development of education in the new era advance with "number"
MySQL
[AUTOSAR nine c/s principle Architecture]
How wide does the dual inline for bread board need?
Basic remote connection tool xshell
1696C. Fishingprince Plays With Array【思维题 + 中间状态 + 优化存储】
随机推荐
Trois tâches principales: asynchrone, courrier et timing
按键精灵打怪学习-自动回城路线的判断
[flutter] icons component (load the built-in icon of flutter | display the material design icon completely)
[flutter] icons component (fluttericon Download Icon | customize SVG icon to generate TTF font file | use the downloaded TTF icon file)
Basic remote connection tool xshell
比较版本号
Database SQL language 01 where condition
The R language uses the ctree function in the party package to build conditional inference decision trees, uses the plot function to visualize the trained conditional inference decision tree, and the
瑞萨电子RZ/G2L开发板上手评测
Machine learning terminology
每日一题之干草堆的移动
MySQL
[introduction to AUTOSAR seven tool chain]
Win10 can't be installed in many ways Problems with NET3.5
MySQL
SwiftUI 组件大全之使用 SceneKit 和 SwiftUI 构建交互式 3D 饼图(教程含源码)
KingbaseES ALTER TABLE 中 USING 子句的用法
无向图的割点
递归处理组织的几种情况
按键精灵打怪学习-回城买药加血