Android?Gradle模塊依賴替換使用技巧
背景
我們在多模塊項(xiàng)目開發(fā)過程中,會遇到這樣的場景,工程里依賴了一個自己的或者其他同事的 aar
模塊,有時(shí)候?yàn)榱碎_發(fā)調(diào)試方便,經(jīng)常會把 aar
改為本地源碼依賴,開發(fā)完畢并提交的時(shí)候,會再修改回 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)閉,即可實(shí)現(xiàn) aar
模塊本地依賴調(diào)試,提交代碼也不用去手動修改回 aar
依賴。
以上就是Android Gradle模塊依賴替換使用技巧的詳細(xì)內(nèi)容,更多關(guān)于Android Gradle模塊依賴替換的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
android實(shí)現(xiàn)底部導(dǎo)航欄
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)底部導(dǎo)航欄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06Android自定義ScrollView實(shí)現(xiàn)放大回彈效果
這篇文章主要為大家詳細(xì)介紹了Android自定義ScrollView實(shí)現(xiàn)放大回彈效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05Android Studio實(shí)現(xiàn)補(bǔ)間動畫
這篇文章主要為大家詳細(xì)介紹了Android Studio實(shí)現(xiàn)補(bǔ)間動畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11Android 實(shí)現(xiàn)IOS選擇拍照相冊底部彈出的實(shí)例
這篇文章主要介紹了Android 實(shí)現(xiàn)IOS選擇拍照相冊底部彈出的實(shí)例的相關(guān)資料,這里提供了實(shí)現(xiàn)效果圖及實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-07-07Android大圖監(jiān)測系統(tǒng)的三種實(shí)現(xiàn)方式
在Android應(yīng)用中,大圖的加載和顯示可能導(dǎo)致內(nèi)存占用過高,進(jìn)而引發(fā)OOM(Out Of Memory)異常,影響應(yīng)用的穩(wěn)定性和用戶體驗(yàn),為了更好地管理大圖資源,我們需要建立起一套可靠的大圖監(jiān)測系統(tǒng),文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2024-01-01Android自定義button點(diǎn)擊效果的兩種方式
這篇文章主要為大家詳細(xì)介紹了Android自定義button點(diǎn)擊效果的兩種方式,感興趣的小伙伴們可以參考一下2016-05-05Android Studio開發(fā)之 JNI 篇的簡單示例
本篇文章主要介紹了Android Studio開發(fā)之 JNI 篇的簡單示例,它提供了若干的API實(shí)現(xiàn)了Java和其他語言的通信,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10flutter InkWell實(shí)現(xiàn)水波紋點(diǎn)擊效果
這篇文章主要為大家詳細(xì)介紹了flutter InkWell實(shí)現(xiàn)水波紋點(diǎn)擊效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07在Android中使用WebSocket實(shí)現(xiàn)消息通信的方法詳解
這篇文章主要介紹了在Android中使用WebSocket實(shí)現(xiàn)消息通信的方法詳解,消息推送功能可以說移動APP不可缺少的功能之一,使用WebSocket實(shí)現(xiàn)消息推送功能。感興趣的可以了解一下2020-07-07Android AlertDialog對話框詳解及實(shí)例
這篇文章主要介紹了Android AlertDialog對話框詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2016-12-12