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

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

image

定義接口和數(shù)據(jù)Model,實現(xiàn)對應(yīng)接口服務(wù)

直接在mis文件夾下,創(chuàng)建對應(yīng)的包名、接口類和數(shù)據(jù)Model(即對外暴露SDK)。并在java文件夾下,實現(xiàn)對應(yīng)的接口服務(wù)。

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

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