Android模組介面服務,暴露SDK+介面服務查詢(類似微信.api)

EastWoodYang發表於2018-07-30

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.1.0'
    }
}
複製程式碼

在模組的build.gradle中新增mis 外掛

apply plugin: 'mis' 
複製程式碼

建立 mis 目錄

src/main/java 同級目錄,建立mis資料夾

Android模組介面服務,暴露SDK+介面服務查詢(類似微信.api)

定義介面和資料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交流。 github.com/EastWoodYan…

相關文章