美文网首页Android开发Android开发经验谈Android技术知识
Android模块接口服务,暴露SDK+接口服务查找(类似微信.

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

作者: EastWoodYang | 来源:发表于2018-07-30 19:07 被阅读35次

    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 {
        url = 'maven地址'
        repository = 'maven上对应的repository'
        username = '用户名'
        password = '密码'
    }
    

    配置 GAV

    dependencies {
        ...
        implementation misSource(
            group: 'com.eastwood.demo',
            name: 'library-sdk'
            version: 1.0.0 // 上传maven时必须指定版本号,目前不不支持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,在对应项目中,双击 Tasks/upload/uploadMis,将执行上传任务。

    上传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

    相关文章

      网友评论

        本文标题:Android模块接口服务,暴露SDK+接口服务查找(类似微信.

        本文链接:https://www.haomeiwen.com/subject/kmqqvftx.html