Android 模块化 暴露接口

之前看了微信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
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,265评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,081评论 25 709
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,224评论 6 342
  • 6月的中旬,这本是属于毕业的狂欢季节,而我却收到了父亲的病危通知,匆匆忙忙地赶去医院,看见母亲已经哭红了双眼,主治...
    这菇凉阅读 2,454评论 0 1
  • 祝你生日快乐! 生日这天,我用力的体会着母亲 二十五年前的痛苦 可是我失败了,败在了一口气面前 那口气我的母亲有,...
    宇斯阅读 2,498评论 0 4

友情链接更多精彩内容