1.前言
随着 App 的业务增加、版本迭代以及冗余的 “远古时期” 代码,App 代码变得臃肿增量叠加、开发者需要了解各个功能、单测功能编译时长、没有统一快速开发框架,代码复用性低,组件化开发就很有必要。
2.组件化架构
1).组件化架构的思想
组件化开发框架可以细化为不同的部分,包括 Android UI、网络请求、数据库持久化、图片处理、View、工具类、sdk、内部统一风格组件等;框架包括但不限于通用功能,如果是部门内部项目中通用的功能,也可以独立出来成为一个通用的库存在。
2).组件化有哪些方案、各自的优势
① ARouter:基因中自带支持从webview中调用、不用互相注册(不用知道需要调用的app的进程名称等信息)等;
② ComponentCaller: 集成简单、功能丰富、全程监控、改造老项目成本低等;
③ Google AutoService:Google推荐、继承简单、功能强大等;
3).AutoService 组件化实现
原理:AutoService会自动在META-INF文件夹下生成Processor配置信息文件,该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候, 就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。
① 添加依赖
implementation 'com.google.code.gson:gson:2.8.6'
② 添加 Javapoet 常用 api
annotationProcessor 'com.google.code.gson:gson:2.8.6'
//Kotlin 需要kapt支持
apply plugin: 'kotlin-android'apply
plugin: 'kotlin-android-extensions'
//kapt插件、会有很多问题、博客地址:https://www.jianshu.com/p/b58d733bc54eapply
plugin: 'kotlin-kapt'
③ 使用 @AutoService 注解
//第一步 创建下沉接口
interface IWebViewService {
fun startWebActivity(context: Context, title: String, url: String)
fun startWebFragment(url: String): Fragment
fun starLocalTestHtml(context: Context)
}// 第二步 实现接口
@AutoService(IWebViewService::class)
class WebViewServiceImpl : IWebViewService {
override fun startWebActivity(context: Context, title: String, url: String) {
WebActivity.create(context, title, url)
}
override fun startWebFragment(url: String): Fragment {
return WebFragment.create