問題背景
模塊化在安卓開發(fā)中應用廣泛,開發(fā)者可以將自己工程中的模塊編譯成aar提供給其他工程使用,也可以使用其他工程提供的模塊aar. 但是這些aar可能有自己的依賴(如jar包)等。當外部工程在依賴aar時,可能無法依賴到aar的依賴。
模塊被自身工程使用的情況
對于被依賴的模塊,如果其是在自身的工程中,如果在編譯時提示找不到相關的類或資源,常見的解決方案是:
- 將compileOnly修改為implementation或api
- 若是單元測試無法依賴,需添加androidTestImplementation
即解決思路就是修改build.gradle中的編譯關鍵字,讓其依賴在編譯后,也能被打包到apk中。
模塊被其他工程使用的情況
一般情況下,模塊包括資源文件的話,需要將其編譯成aar文件,才能被其他工程所依賴。但是會發(fā)現(xiàn),不管是否使用implementation或者api關鍵字,其相關依賴都不會被編譯到aar文件中。導致在依賴aar時,會告警找不到aar中的類。
常見的解決方案為:
將依賴復制到工程中
若模塊中的依賴不是動態(tài)依賴,即是將依賴文件放置在本地路徑下。可以將這些依賴復制到使用模塊的工程中。不推薦該方法。復制依賴到aar中
在對應模塊的build.gradle中添加task
task copyLibs(type: Copy) {
from configurations.compile
into 'libs'
}
執(zhí)行該任務后,相應的依賴會被包含到aar中。
- 在外部工程中添加依賴
例如在aar對應的模塊中,其依賴是
implementation xxx
只需將這句命令復制到使用aar的工程的build.gradle中,即可實現(xiàn)對其的依賴。