查看原文
其他

总结一波安卓组件化相关开源方案

齐翊 鸿洋 2019-04-05

本文作者


作者:齐翊

链接:

https://juejin.im/post/5a7ab8846fb9a0634514a2f5

本文由作者授权发布。


1摘要


为了让大家能快速对android组件化有个整体的认识,本文将从多个维度对目前网上一些有代表性的开源组件化开发方案进行对比,从而更好的区分各组件化方案的特点,快速选择适合自己使用的方案深入学习并使用,在面试中被问到时也能做到心中有数。


Android平台上组件化开发的概念近两年非常火热,有些同学反映在面试中被问到的频率也很高。


目前网上关于组件化开发方案的文章、开源库比较多,让很多初学者感到迷茫,不知该从何处入手,难以确定自身的业务特性适合使用哪种框架,如果全部都学习一遍成本比较高,而且在学习过程中容易将各方案的一些特性记混淆。


为了让大家能快速对android组件化有个整体的认识,本文将从多个维度对目前网上一些有代表性的开源组件化开发方案进行对比,从而更好的区分各组件化方案的特点,快速选择适合自己使用的方案深入学习并使用,在面试中被问到时也能做到心中有数。


由于篇幅及个人精力所限,只选取了比较有代表性的几个组件化方案进行比较,对比内容中如有谬误之处,欢迎大家指正,可以在评论中留言或者提issue和pr给我,和我一起完善更多组件化方案的对比,降低开发者学习组件化技术的难度。


https://github.com/luckybilly/AndroidComponentizeLibs

持续更新中,欢迎watch、star


2对比表


markdown语法对表格支持的不太友好,为了方便查看,下面贴出对比表的截图,具体的表格见github:



放大凑合可以看,非常清晰的可以查看github上的表格。


表格中框架的相关链接:


项目1:CC


地址:https://github.com/luckybilly/CC

使用简单但功能强大的安卓组件化框架。


相关学习材料:

  • wiki

    https://github.com/luckybilly/CC/wiki

  • CC框架实践(1):实现登录成功再进入目标界面功能

    http://t.cn/REb6eLO

  • CC框架实践(2):Fragment和View的组件化
    http://t.cn/REbX0Ds

  • CC框架实践(3): 让jsBridge更优雅

    https://github.com/luckybilly/CC/wiki/CC框架实践(3): 让jsBridge更优雅


项目2:得到DDComponentForAndroid


地址:

https://github.com/luojilab/DDComponentForAndroid


一套完整有效的android组件化方案,支持组件的组件完全隔离、单独调试、集成调试、组件交互、UI跳转、动态加载卸载等功能。

相关学习材料:

  • 原理解释:Android彻底组件化方案实践

    https://www.jianshu.com/p/1b1d77f58e84

  • 设计思路:浅谈Android组件化

    https://mp.weixin.qq.com/s/RAOjrpie214w0byRndczmg

  • demo解读:Android彻底组件化demo发布

    https://www.jianshu.com/p/59822a7b2fad


项目3:ModularizationArchitecture


地址:

https://github.com/SpinyTech/ModularizationArchitecture


是Android平台上一种基于路由的多进程、组件化架构:它通过共有路由,在不引用其他模块的前提下,实现不同模块,不同进程之间的通信。它适合中型App架构的团队协作,并行开发,业务线解耦,白盒测试等场景。


相关学习资料:

  • Android架构思考(模块化、多进程)

    http://blog.spinytech.com/2016/12/28/android_modularization/

  • ModularizationArchitecture 使用教程

    http://blog.spinytech.com/2017/02/01/ma_get_start_cn/


项目4:阿里ARouter


地址:

https://github.com/alibaba/ARouter


Android平台中对页面、服务提供路由功能的中间件,我的目标是 —— 简单且够用。


相关学习资料:

  • 开源最佳实践:Android平台页面路由框架ARouter

    https://yq.aliyun.com/articles/71687


项目5:聚美组件化方案Demo
(基于聚美Router)


地址:

https://github.com/yjfnypeu/AndroidComponent


聚美Router地址:

https://github.com/JumeiRdGroup/Router


相关学习资料:

  • 聚美组件化实践之路

    https://juejin.im/post/5a4b4425518825128654eef4

  • Router:一款单品、组件化、插件化全支持的路由框架

    https://juejin.im/post/5a37771f6fb9a0450e7636e0


项目6:ActivityRouter


https://github.com/mzule/ActivityRouter


支持给Activity定义 URL,这样可以通过 URL 跳转到Activity,支持在浏览器以及 app 中跳入。


  • 通过 URL 打开 Activity

    http://t.cn/REbKrU6

  • ActivityRouter路由框架:通过注解实现URL打开Activity

    https://joyrun.github.io/2016/08/01/ActivityRouter/


其它比较有特色的组件化方案简介


51信用卡路由方案OkDeepLink


曾经在作者的github账号上开源,现已删除,作者在博文中提到后续2.0版会放到公司的github账号上,但一直未发布。 这里有个fork版本。


  • https://www.jianshu.com/p/8a3eeeaf01e8

  • https://github.com/jjerry/OkDeepLink


这个方案中使用aspectJ来实现路由表的自动注册,与其它方案不太一样,不过此方案的作者也打算废弃这种方式,理由是aspectJ还是太重了。


这个方案文章中还提到了关于路由安全的措施,其中有使用URL中加签名的方式来屏蔽非法访问,类似于客户端连接服务端的http请求对参数进行加密校验


组件总线方案ModuleBus


介绍文档:组件化开发跨module交互方式---ModuleBus交互


  • https://juejin.im/post/58524bd2b123db00655b4e99

  • https://github.com/cangwang/ModuleBus


这个方案的特别之处在于其借鉴了EventBus的思想,组件的注册/注销和组件调用的事件发送都跟EventBus类似。


美柚路由方案RouterKit


https://github.com/gybin02/RouterKit


这个方案的特别之处在于其组件自动注册的方案:通过apt生成每个module的路由表,然后复制到app的assets目录,运行的时候遍历asset目录,反射对应的activity。


https://github.com/luckybilly/AndroidComponentizeLibs

其它(欢迎给我提issue或pr补充!)


推荐阅读

让你的代码更加简洁 & 10s内找到某个库特定版本

实现群聊@提及 #微博话题#等功能



如果你想要跟大家分享你的文章,欢迎投稿~

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存