Android模塊接口服務(wù),暴露接口+接口服務(wù)查找(類似微信.api)

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文件夾

image

定義接口和數(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ù)。

接口+數(shù)據(jù)Model

聲明當(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
上傳SDK

上傳成功之后,需指定或更新 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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評(píng)論 25 709
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,253評(píng)論 6 342
  • 很想寫(xiě)點(diǎn)什么,關(guān)于在工作坊出狀況(發(fā)瘋)的事,雖然很不完整(希望以后會(huì)把寫(xiě)完整),雖然語(yǔ)無(wú)倫次混亂不堪,雖然有很多...
    沉靜花閱讀 156評(píng)論 0 0
  • 我是一個(gè)眉清目秀的小女孩,愛(ài)笑,愛(ài)跳,也愛(ài)唱。 我經(jīng)常一個(gè)人在家,當(dāng)家中一片冷清時(shí),陪伴我的,是一...
    春兒的后花園閱讀 1,041評(píng)論 0 0

友情鏈接更多精彩內(nèi)容