Android模块接口服务,暴露SDK+接口服务查找(类似微信.api)

那年夏天 2019-06-28

MIS - 模块接口服务(Module Interface Service)

模块A对外暴露SDK(接口+数据Model),在运行时,通过接口将对应的接口服务注册到服务容器中。

模块B引用模块A对外暴露的SDK,通过SDK中的接口在服务容器中查找对应的接口服务并调用。

基于上述,MIS需要解决的问题:

  • 模块如何对外暴露SDK
  • 如何通过接口查找对应的接口服务

模块如何对外暴露SDK

这里所述的SDK对应的就是一个jar包,其实就是Android module中,打一个包含接口和数据model的jar包。

如何通过接口查找对应的服务

维护一个Map,接口为key, 对应的接口服务为value,是不是就可以了?

Usage

引用 mis 插件

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

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

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

apply plugin: 'mis'

创建 mis 目录

src/main/java 同级目录,创建mis文件夹

Android模块接口服务,暴露SDK+接口服务查找(类似微信.api)

定义接口和数据Model,实现对应接口服务

直接在mis文件夹下,创建对应的包名、接口类和数据Model(即对外暴露SDK)。并在java文件夹下,实现对应的接口服务。

Android模块接口服务,暴露SDK+接口服务查找(类似微信.api)

声明当前模块的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

Android模块接口服务,暴露SDK+接口服务查找(类似微信.api)

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

相关推荐