查看許多文章後知道,模組化在架構上有水平跟垂直的做法
我首先把資料層分出來,也就是 repo 與 userCase
這部分很單純,因為層級是上下,且原則上資料層應該會是純 kolin,不會調用到 android framework
我覺得好處就是很明確的可以知道這些模組到底依賴哪些東西
原本都寫在同一個模組,即使有分層,還是很容易為了方便而去引用到不適合的類別
可能是原本那個類別的職責就不夠單一,也可能他是個第三方套件
那我們就可以重新思考這個部分是不是有必要重構寫法、這個第三方套件呼叫的時間是不是有必要在這個模組!
如果一開始就有明確的分層與di,那在模組化的過程就沒這麼痛,只是要考慮一些公用方法到底要放在哪裡。
而實作也蠻簡單的,如下影片
用AS的功能建立完模組後,系統會自動在 settings.gradle 中添加新的模組
include ':app'include ':test'
且會多出兩個 proguard 檔案
consumer-rules.pro
proguard-rules.pro
proguard-rules.pro:不用設定
consumer-rules.pro:
你可以把所有的混淆規則寫在主模組的 proguard-rules.pro,也可以把該模組會用的混淆規則寫在 consumer-rules.pro,寫在這邊的混淆規則最後也會被加到主模組的proguard-rules.pro
在主模組中引用新模組
}
implementation project(':test')
遇到的問題:
子模組中可能會需要用到 app 版本號
這邊我偷懶的把所有的子模組都設定為主模組的版號與版本號
找不到 BuildConfig.DEBUG
在模組增加
debug{}
R 下的資源
這邊避免混亂,我建了新個新的子模組專門放R下的資源,然後所有的模組都會去引用它,集中管理!
包正式版會遇到這個問題
More than one file was found with OS independent path META-INF/library_release.kotlin_modulehttps://issuetracker.google.com/issues/152898926
解法就是在子模組的 gradle 裡添加
android{
...
kotlinOptions.freeCompilerArgs += ["-module-name", "test"]
}
沒有留言:
張貼留言