美文网首页
Android 模块化 暴露接口

Android 模块化 暴露接口

作者: 画十 | 来源:发表于2017-09-12 10:28 被阅读826次

之前看了微信Android模块化架构重构实践很受启发,对其中的".api化"比较感兴趣,下面为自己的实现,和微信的效果有些许区别,但是能实现基本功能。

原理

  1. 找到所有需要暴露的接口文件
  2. 把他们打成jar
  3. 发布到本地maven仓库
  4. 其他module引用jar包使用

实现

  1. 约定需要暴露的接口文件规则:
    • 因为打进jar包的是class文件,所以按照微信的.api后缀的做法就不能在我这里实现了,因为.api编译后还是.class(除非自己javac,这也是一种解决方案),所以我就在文件夹上进行标注,约定在"_apis_"文件夹下的java/kotlin文件为需要暴露的接口文件。
    • 这样带来了一个好处就是兼容了kotlin文件,我们可以暴露使用kotlin写的接口
  2. 发布到本地maven仓库
    • 在需要暴露接口的modulebuild.gradle中添加:

         apply plugin: 'maven-publish'
         task sourceJar(type: Jar) {
             //java编译后的class文件
             from fileTree(dir: "${project.projectDir.absolutePath}/build/intermediates/classes/debug", include: '**/_apis_/**/*.class')
             //kotlin编译后的class文件
             from fileTree(dir: "${project.projectDir.absolutePath}/build/tmp/kapt3/incrementalData/debug", include: '**/_apis_/**/*.class')
         }
      
         publishing {
             publications {
                 bar(MavenPublication) {
                     groupId 'your.group.id'
                     artifactId project.name //使用当前module name作为jar的name
                     version '1.0'
                     artifact(sourceJar)
                 }
             }
             repositories {
                 maven {
                     //发布到本项目的:  根目录/repo/
                     url "${rootProject.projectDir.absolutePath}/repo"
                 }
             }
         }
      
    • Rebuild Project 后 找到gradle project如下图:

      image.png
    • 依下图找到publish task,双击666

      image.png
    • 上述2步可以简洁化处理:在当前项目的terminal中执行

       ./gradlew clean
       ./gradlew assembleDebug
       ./gradlew publish
      

使用

  • 在项目根目录的build.gradle中添加:
    allprojects {
        repositories {
                maven { url "${rootProject.projectDir.absolutePath}/repo" }
        }
    }
    
  • 在需要使用接口的modulebuild.gradle中添加依赖
    provide 'you.group.id:module_name:1.0' //module_name为暴露接口的那个module的name
    

相关文章

  • Android 模块化 暴露接口

    之前看了微信Android模块化架构重构实践很受启发,对其中的".api化"比较感兴趣,下面为自己的实现,和微信的...

  • JavaScript模块规范(CommonJS,AMD)

    在JavaScript模块一文中介绍了如何组织代码实现模块化。模块化能隐藏私有的属性和方法,只暴露出公共接口。这样...

  • 前端模块化开发

    js模块化开发的价值 前端模块化开发的价值 通过 exports暴露接口。这意味着不需要命名空间了,更不需要全局变...

  • JavaScript模块规范(CommonJS,AMD)

    在JavaScript模块一文中介绍了如何组织代码实现模块化。模块化能隐藏私有的属性和方法,只暴露出公共接口。这样...

  • 补基础:JS 模块化

    补基础:JS 模块化 为什么要用到模块化 解耦 复用 先举一个简单的例子 如果像上面那么样引入会直接暴露所有接口,...

  • 前端模块化发展史

    前端模块化实现现状 1.