MIS - 模塊接口服務(wù)(Module Interface Service)
模塊A對外暴露SDK(接口+數(shù)據(jù)Model),在運行時,通過接口將對應(yīng)的接口服務(wù)注冊到服務(wù)容器中。
模塊B引用模塊A對外暴露的SDK,通過SDK中的接口在服務(wù)容器中查找對應(yīng)的接口服務(wù)并調(diào)用。
基于上述,MIS需要解決的問題:
- 模塊如何對外暴露SDK
- 如何通過接口查找對應(yīng)的接口服務(wù)
模塊如何對外暴露SDK
這里所述的SDK對應(yīng)的就是一個jar包,其實就是Android module中,打一個包含接口和數(shù)據(jù)model的jar包。
如何通過接口查找對應(yīng)的服務(wù)
維護一個Map,接口為key, 對應(yīng)的接口服務(wù)為value,是不是就可以了?
Usage
引用 mis 插件
在根項目的build.gradle中添加 mis 插件的引用:
buildscript {
dependencies {
classpath 'com.eastwood.tools.plugins:mis:1.0.5'
}
}
在模塊的build.gradle中添加mis 插件:
apply plugin: 'mis'
創(chuàng)建 mis 目錄
在src/main/java 同級目錄,創(chuàng)建mis文件夾
定義接口和數(shù)據(jù)Model,實現(xiàn)對應(yīng)接口服務(wù)
直接在mis文件夾下,創(chuàng)建對應(yīng)的包名、接口類和數(shù)據(jù)Model(即對外暴露SDK)。并在java文件夾下,實現(xiàn)對應(yīng)的接口服務(wù)。
聲明當(dāng)前模塊的sdk
在模塊 build.gradle 中dependencies中,通過 misSource
聲明,例如:
dependencies {
...
implementation misSource(
group: 'com.eastwood.demo',
name: 'library-sdk'
// version: 1.0.0 // 上傳maven時指定版本號
)
}
注冊服務(wù)
在模塊build.gradle中添加mis服務(wù)容器庫引用:
dependencies {
implementation 'com.eastwood.common:mis:1.0.0'
}
然后,在MisService(服務(wù)容器)注冊服務(wù),可以使用 服務(wù)接口 + 服務(wù)接口的實現(xiàn)對象 或 服務(wù)接口的實現(xiàn)類 進行注冊,例如:
// 服務(wù)接口 + 服務(wù)接口的實現(xiàn)對象
MisService.register(ILibraryService.class, new LibraryService());
// 服務(wù)接口 + 服務(wù)接口的實現(xiàn)類
MisService.register(ILibraryService.class, LibraryService.class);
獲取服務(wù)
在其他模塊build.gradle中添加mis庫,以及通過 misProvider
引用sdk:
dependencies {
implementation 'com.eastwood.common:mis:1.0.0'
implementation misProvider('com.eastwood.demo:library-sdk')
}
Sync后,就可以通過接口在MisService服務(wù)容器中查找對應(yīng)的接口服務(wù)并調(diào)用,例如:
ILibraryService libraryService = MisService.getService(ILibraryService.class);
libraryService.getLibraryInfo()
上傳Maven
接口調(diào)試結(jié)束后,需將mis
文件夾打包上傳至Maven。
配置 Maven
在根項目的 build.gradle 或 模塊 build.gradle 中添加配置:
apply plugin: 'mis-maven'
misMaven {
username = '用戶名'
password = '密碼'
repository = 'maven上對應(yīng)的倉庫地址'
snapshotRepository = 'maven上對應(yīng)的快照倉庫地址'
}
配置 GAV
dependencies {
...
implementation misSource(
group: 'com.eastwood.demo',
name: 'library-sdk'
version: 1.0.0 // 上傳maven時必須指定版本號,支持'version-SNAPSHOT'
)
}
除了GAV等必配項,還有以下配置:
-
dependencies String[] 類型
若上傳的sdk引用其他類庫,需配置對應(yīng)的GAV,例如:
dependencies { ... implementation misSource( group: 'com.eastwood.demo', name: 'library-sdk', version: '1.0.0', dependencies = ['com.google.code.gson:gson:2.8.1'] ) }
另外,在MicroModule目錄結(jié)構(gòu)下的配置
dependencies {
...
implementation misSource(
group: 'com.eastwood.demo',
name: 'library-sdk',
version: '1.0.0',
microModuleName: '**microModule name**',
dependencies = ['com.google.code.gson:gson:2.8.1']
)
}
執(zhí)行上傳Task
打開Gradle Tasks View,在對應(yīng)項目執(zhí)行上傳任務(wù)。
- publishMis[...]PublicationToMavenRepository 對應(yīng)上傳至repository
- publishMis[...]PublicationToMavenSnapshotRepository 對應(yīng)上傳至snapshotRepository
上傳成功之后,需指定或更新 misProvider
中的version。
dependencies {
implementation 'com.eastwood.common:mis:1.0.0'
implementation misProvider('com.eastwood.demo:library-sdk:1.0.0')
}
QA
1. 沒有Maven私服,怎么辦?
不指定misSource 和 misProvider 中的version。
最后
MIS已經(jīng)上傳至Github,歡迎star交流。
https://github.com/EastWoodYang/Mis