網(wǎng)站首頁 編程語言 正文
背景
我們在多模塊項目開發(fā)過程中,會遇到這樣的場景,工程里依賴了一個自己的或者其他同事的 aar
模塊,有時候為了開發(fā)調(diào)試方便,經(jīng)常會把 aar
改為本地源碼依賴,開發(fā)完畢并提交的時候,會再修改回 aar
依賴,這樣就會很不方便,開發(fā)流程圖示如下:
解決
一開始我們通過在 app
的 build.gradle
里的 dependency
判斷如果是需要本地依賴的 aar
,就替換為 implementation project
依賴,偽代碼如下:
dependencies { if(enableLocalModule) { implementation 'custom:test:0.0.1' } else { implementation project(path: ':test') } }
這樣就可以不用每次提交代碼還要修改回 aar
依賴,但是如果其他模塊如果也依賴了該 aar
模塊,就會出現(xiàn)問題,雖然可以繼續(xù)修改其他模塊里的依賴方式,但是這樣就會有侵入性,而且不能徹底解決問題,仍然有可能出現(xiàn)本地依賴和 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
到這里就大功告成了,后續(xù)只需要在 local.properties
里開啟和關(guān)閉,即可實現(xiàn) aar
模塊本地依賴調(diào)試,提交代碼也不用去手動修改回 aar
依賴。
原文鏈接:https://juejin.cn/post/7062642189154648101
相關(guān)推薦
- 2022-04-03 Flutter折疊控件使用方法詳解_Android
- 2022-08-02 源碼解析python中randint函數(shù)的效率缺陷_python
- 2022-05-27 C++回溯算法廣度優(yōu)先搜索舉例分析_C 語言
- 2022-09-15 Python?torch.onnx.export用法詳細介紹_python
- 2022-11-12 c++自定義sort()函數(shù)的排序方法介紹_C 語言
- 2022-12-13 sql索引失效的情況以及超詳細解決方法_MsSql
- 2022-08-20 Python超詳細講解元類的使用_python
- 2022-03-15 linux系統(tǒng)中計劃任務(wù)介紹_Linux
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支