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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

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