2022年6月19日 星期日

Android 模組化簡易實作

查看許多文章後知道,模組化在架構上有水平跟垂直的做法

我首先把資料層分出來,也就是 repo 與 userCase

這部分很單純,因為層級是上下,且原則上資料層應該會是純 kolin,不會調用到  android framework

我覺得好處就是很明確的可以知道這些模組到底依賴哪些東西

也會更關心一下 gradle 的設定

原本都寫在同一個模組,即使有分層,還是很容易為了方便而去引用到不適合的類別

可能是原本那個類別的職責就不夠單一,也可能他是個第三方套件

那我們就可以重新思考這個部分是不是有必要重構寫法、這個第三方套件呼叫的時間是不是有必要在這個模組!


如果一開始就有明確的分層與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_module
https://issuetracker.google.com/issues/152898926

解法就是在子模組的 gradle 裡添加
android{
...
kotlinOptions.freeCompilerArgs += ["-module-name", "test"]
}

沒有留言:

張貼留言