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