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

EastWoodYangIP属地: 湖南
1字数 716

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
6人点赞
总资产3共写了5941字获得56个赞共33个粉丝

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,041评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,868评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,937评论 6 342
  • 很想写点什么,关于在工作坊出状况(发疯)的事,虽然很不完整(希望以后会把写完整),虽然语无伦次混乱不堪,虽然有很多...
    沉静花阅读 143评论 0 0
  • 我是一个眉清目秀的小女孩,爱笑,爱跳,也爱唱。 我经常一个人在家,当家中一片冷清时,陪伴我的,是一...
    春儿的后花园阅读 906评论 0 0