组件化,模块化,插件化,热更新归纳

模块化

模块化是指以重用化为目的,将一个系统拆分为一个个单独的小功能工具:避免重复造轮子,节省开发维护成本;降低项目复杂性,提升开发效率;同一个模块,在一定层度上确保了技术方案的统一性。

组件化

由app空壳,只包含mainActivity的东西,和baseModule和各个module组成完整项目.

APP空壳module:声明应用包名,名称、图标以及其他组件中最终在集成开发模式下都被合并到这份 AndroidManifest.xml 中。另外Android还有应用的打包签名代码混淆。
basemodule:在基础组件的Application实现各组件Application初始化操作(反射方法获取所有依赖的module的application),统筹管理所有依赖关系,moudle向base module注册service接口,其他module可以调用实现跨moudle通信。还有就是共用工具库的实现。
普通module:业务相关的各个模块。通过修改他们的buildtype可以设置是单独运行还是集成运行,每个moudle拥有自己的application和两份清单文件,集成编译时设置引用app的application和清单文件。还要注意资源名重复,通过加前缀。

组件化优势

1.组件化解耦:使各业务组件化间解耦,因此各个都是独立的module,它们之间是没有依赖关系。
2.单独编译:每个module实际上也是一个完整的项目,可以进行单独编译,调试。
3.并行开发:互不影响可以并行开发。

组件通信

1.组件之间的页面跳转 (Activity 到 Activity, Fragment 到 Fragment, Activity 到 Fragment, Fragment 到 Activity) 以及跳转时的数据传递 (基础数据类型和可序列化的自定义类类型)。使用arouer跳转
2.组件之间的自定义类和自定义方法的调用(组件向外提供服务)。需要 ARouter 配合架构中的 公共服务(CommonService) 实现:在公共服务(CommonService) 中声明 Service 接口 (含有需要被调用的自定义方法), 然后在自己的模块中实现这个 Service 接口, 再通过 ARouter API 暴露实现类。此外还可通过eventBus等异步通信库。

arouter路由原理

我们在代码里加入的@Route注解,会在编译时期通过apt生成一些存储path和activity.class映射关系的类文件,然后app进程启动的时候会加载这些类文件,把保存这些映射关系的数据读到内存里(保存在map里),然后在进行路由跳转的时候,ARouter会通过它自己存储的路由表找到路由地址对应的Activity.class,它的内部会调用startActivity(intent)进行跳转,这样便可以实现两个相互没有依赖的module顺利的启动对方的Activity了。

插件化

插件化是将一个apk根据业务功能拆分成不同的子apk(也就是不同的插件),每个子apk可以独立编译打包,最终发布上线的是集成后的apk。在apk使用时,每个插件是动态加载的,插件也可以进行热修复和热更新。
主要解决三个问题:如何加载类、如何加载资源、如何管理组件生命周期。

插件化原理

插件化就是通过类加载、资源加载、组件生命周期管理去动态加载一个apk。
:类加载
Android中类的加载也是通过ClassLoader来完成包含DexClassLoader和PathClassLoader。DexClassLoader用来加载未安装apk的dex。PathClassLoader主要用来加载系统类和应用程序的类。
资源加载
Android系统通过Resource对象加载资源,因此只需要将apk需要的资源文件所在路径到AssetManager中,即可实现对插件资源的访问。
生命周期管理
主流的是hook方式,通过自定义Instrumentation替换activityThread中的Instrumentation代理类欺骗了系统,hook了Activity的启动和创建,省去了手动管理插件Activity生命周期的繁琐,让插件Activity像正常的Activity一样被系统管理,并且插件Activity在开发时和常规一样,即能独立运行又能作为插件被主工程调用。
Atlas

热修复

插件化是想把需要实现的模块当做一个独立的提取出来,减少宿主的规模,使用时动态加载。
热修复强调的是在不需要二次安装应用的前提下修复已知的bug。
在原先的app打包的时候,阻止相关类去打上核查标志,然后将补丁 dex 文件放到 dex数组靠前位置,这样在加载 class 时被抢先加载代替掉Bug类从而达到修复的目的。
Tinker

插件化和组件化区别

1.组件化的单位是module静态加载,插件化的单位是apk,动态加载
2.关注点不同,插件化更关注动态加载、热更新、热修复等‘插拔’技术。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容