Android模組化之MicroModule(微信Pins工程)

EastWoodYang發表於2018-07-28

微信Pins工程

相信你看過微信關於模組化的分享《微信Android模組化架構重構實踐》,也注意到裡面提到的pins工程結構。

pins工程

作者是這樣描述的 ------“pins工程能在module之內再次構建完整的多子工程結構,通過project.properties來指定編譯依賴關係。通過依賴關係在編譯時找到所有的資源和原始碼路徑。”

仔細推敲這句話的意思,應該能知道它實現的基本原理------通過設定sourceSets指定多個java、res等路徑.

有關sourceSets的介紹: developer.android.com/studio/buil… google.github.io/android-gra…

但是,有一個問題需要要知道的是,一個module只能指定一個AndroidManifest檔案,pins工程中包含了多個AndroidManifest,它是怎麼做到的?

研究過com.android.tools.build:gradle,會留意到它使用到一個子庫com.android.tools.build:manifest-merger,官方通過這個庫來合併多個AndroidManifest檔案,或許pins工程也是用了這方式。

接下來,再它的基礎上,我做的一些改動,取了另一個名字叫 MicroModule,先來看一下工程結構:

MicroModule工程結構

與pins工程的結構大致不變,增加了androidTesttest,以及將project.properties替換為build.gradle

MicroModule 介紹

基本原理是不變的,與微信pins工程一樣配置sourceSets。AndroidManifest合併用了com.android.tools.build:manifest-merger

Usage

在根專案的build.gradle中新增外掛依賴:

buildscript {
    repositories {
        jcenter()
        ...
    }
    dependencies {
        classpath 'com.eastwood.tools.plugins:micro-module:1.0.1'
        ...
    }
}
複製程式碼

在模組的build.gradle中引用外掛並配置 MicroModule:

// 'micro-module'要置於'com.android.application'或'com.android.library'前。
apply plugin: 'micro-module'
apply plugin: 'com.android.application'

// 為了防止兩個沒有依賴關係的MicroModule產生引用,可以開啟下面這個程式碼邊界檢查外掛。
// apply plugin: 'micro-module-code-check'

...

microModule {
    // 這裡的include類似於settings.gradle中include。
    include ':p_home'
    include ':p_common'
    include ':p_base'
}
複製程式碼

MicroModule中的build.gradle:

dependencies {
    implementation microModule(':MicroModule名稱') // 定義依賴關係,引用其他MicroModule
    
    // 你也可以在這裡依賴其他第三方庫
    // implementation '***'
    // api '***'
    // ...
}
複製程式碼

為了使用上的更加方便,專門寫了Android Studio的外掛,能快速的建立一個MicroMoudle.

Android模組化之MicroModule(微信Pins工程)

外掛安裝步驟:

  1. 開啟 [File] -> [Settings...] -> [plugins] -> [Browse repositories...]
  2. 搜尋外掛名稱 MicroModule

Android模組化之MicroModule(微信Pins工程)

外掛詳解: plugins.jetbrains.com/plugin/1078…

外掛專案地址: github.com/EastWoodYan…

最後

MicroModule已經上傳至Github,歡迎star交流。 github.com/EastWoodYan…

相關文章