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

MIS - 模塊接口服務(Module Interface Service)html

模塊A對外暴露SDK(接口+數據Model),在運行時,經過接口將對應的接口服務註冊到服務容器中。java

模塊B引用模塊A對外暴露的SDK,經過SDK中的接口在服務容器中查找對應的接口服務並調用。git

基於上述,MIS須要解決的問題:github

  • 模塊如何對外暴露SDK
  • 如何經過接口查找對應的接口服務

模塊如何對外暴露SDKapache

這裏所述的SDK對應的就是一個jar包,其實就是Android module中,打一個包含接口和數據model的jar包。app

如何經過接口查找對應的服務maven

維護一個Map,接口爲key, 對應的接口服務爲value,是否是就能夠了?ide

Usage

引用 mis 插件

在根項目的build.gradle中添加 mis 插件的引用:gradle

buildscript {
    dependencies {
        classpath 'com.eastwood.tools.plugins:mis:1.0.5'
    }
}

在模塊的build.gradle中添加mis 插件ui

apply plugin: 'mis'

建立 mis 目錄

src/main/java 同級目錄,建立mis文件夾

image

定義接口和數據Model,實現對應接口服務

直接在mis文件夾下,建立對應的包名、接口類和數據Model(即對外暴露SDK)。並在java文件夾下,實現對應的接口服務。

接口+數據Model

聲明當前模塊的sdk

在模塊 build.gradle 中dependencies中,經過 misSource 聲明,例如:

dependencies {
    ...
    implementation misSource(
            group: 'com.eastwood.demo',
            name: 'library-sdk'
            // version: 1.0.0 // 上傳maven時指定版本號
    )
}

註冊服務

在模塊build.gradle中添加mis服務容器庫引用:

dependencies {
    implementation 'com.eastwood.common:mis:1.0.0'
}

而後,在MisService(服務容器)註冊服務,能夠使用 服務接口 + 服務接口的實現對象 服務接口的實現類 進行註冊,例如:

// 服務接口 + 服務接口的實現對象
MisService.register(ILibraryService.class, new LibraryService());
 
// 服務接口 + 服務接口的實現類
MisService.register(ILibraryService.class, LibraryService.class);

獲取服務

在其餘模塊build.gradle中添加mis庫,以及經過 misProvider 引用sdk:

dependencies {
    implementation 'com.eastwood.common:mis:1.0.0'
    implementation misProvider('com.eastwood.demo:library-sdk')
}

Sync後,就能夠經過接口在MisService服務容器中查找對應的接口服務並調用,例如:

ILibraryService libraryService = MisService.getService(ILibraryService.class);
libraryService.getLibraryInfo()

上傳Maven

接口調試結束後,需將mis文件夾打包上傳至Maven。

配置 Maven

在根項目的 build.gradle 或 模塊 build.gradle 中添加配置:

apply plugin: 'mis-maven'
 
misMaven {
    username = '用戶名'
    password = '密碼'
    repository = 'maven上對應的倉庫地址'
    snapshotRepository = 'maven上對應的快照倉庫地址'
}

配置 GAV

dependencies {
    ...
    implementation misSource(
        group: 'com.eastwood.demo',
        name: 'library-sdk'
        version: 1.0.0 // 上傳maven時必須指定版本號,支持'version-SNAPSHOT'
    )
}

除了GAV等必配項,還有如下配置:

  • dependencies String[] 類型

    若上傳的sdk引用其餘類庫,需配置對應的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目錄結構下的配置

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']
    )
}

執行上傳Task

打開Gradle Tasks View,在對應項目執行上傳任務。

  • publishMis[...]PublicationToMavenRepository 對應上傳至repository
  • publishMis[...]PublicationToMavenSnapshotRepository 對應上傳至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已經上傳至Github,歡迎star交流。
https://github.com/EastWoodYang/Mis

相關文章
相關標籤/搜索