笔记(七)——模块化-组件化-插件化小知识

——》个人平时笔记,看到的同学欢迎指正错误,文中多处摘录于各大博主精华、书籍

什么是模块化,组件化, 插件化?

从模块化到组件化再到插件化

androidStudio 多项目依赖同一个module

组件化/模块化

从零开始搭建Android组件化框架

1、首先组件和模块都不是官方规定的,都是这些技术发展下来大家约定俗成的概念,他们都是一个个Module,只是概念内容不一样而已。

Module包含两种格式: application, library。一个Module就是一个小的项目,Module通过依赖来注入到主app工程中,也是AS概念中的模块。

>1.模块化开发:按照项目业务模块来划分,将一个app按业务拆分为登录模块、聊天模块等等,模块化其中一个核心的目的就是代码的高可复用、高可维护和高可扩展性能

模块化的概念可以说贯穿整个组件化、插件化。

>2.组件化开发:对应用功能的封装,一个功能一个组件。比如网络连接交互组件、即时通讯IM组件、数据库组件等。是对模块化更小的细分。

正常一个app中可以有多个module,但是一般只会有一个module是设置为application的,其他均设置为library。将一个工程分成各个模块,各个模块之间相互解耦,可以将module均设置为application独立开发并编译成一个独立的 app进行调试,然后又可以将各个模块module均设置为library组合起来整体构成一个完整的 app,这个概念和模块化没有本质的界限。

组件可以分为两大类,一类是application组件,一类是libs组件,application组件是一个可运行的app。library组件可以作为application的依赖,但是自身不可作为程序运行的存在。只有Module类型为application的组件才能单独提出来做为程序运行存在。

组件化是建立在模块化思想上的一次演进,一个变种。组件化本来就是模块化的概念,但是组件具有可以在模块和单独运行的apk之间自由设置切换的特性。即组件化的核心是模块角色的可转换性, 在打包时是library,在调试时是application。

组件只是我们在代码开发阶段中为了方便叫的一个术语,在组件被打包进APP的时候是没有这个概念的,这些组件最后都会被打包成arr包,然后被app壳工程所依赖,在构建APP的过程中Gradle会自动将重复的arr包排除,APP中也就不会存在相同的代码了。

解决以下项目中的问题:

1.稍微改动一个模块的一点代码都要编译整个工程,耗时耗力

2.公共资源、业务、模块混在一起耦合度太高

3.不方便测试

2.插件化开发

宿主是指普通的apk,插件一般是指经过处理的dex或者apk,在主流的插件化框架中多采用经过特殊处理的apk来作为插件,处理方式往往和编译以及打包环节有关。Android应用程序的.java文件在编译期会通过javac命令编译成.class文件,最后再把所有的.class文件编译成.dex文件放在.apk包里面。那么动态加载(插件化)就是在运行时把插件apk直接加载到classloader里面的技术。

目的:插件化就是要减小宿主程序apk包的大小,同时降低宿主程序的更新频率并做到自由装载模块、在线更新模块。

好处:

1.宿主和插件分开编译

2.并发开发

3.动态更新插件

4.按需下载模块

5.方法数或变量数爆棚

总结:

插件化和组件化没有可比拟性,组件化通俗点讲就是一个项目结构设计、架构思路,而插件化是一个新兴技术的应用。组件化在打包编译前按需加入功能模块,插件化在打包完成主apk后将新需要的功能模块单独打包成apk文件插入主apk中。即组件化的单位是组件(module)。插件化的单位是apk(一个完整的应用)。

①组件化:

1. 用于项目过大,每次编译时间长

2. 用于团队多个人分工开发不同的模块

3. 更好的解耦

4.组件化的灵活性在于按加载时机切换,分离出独立的业务功能组件,比如微信的朋友圈

②插件化:

1. 用于版本新添加功能,更多的是启动另一个apk中的activity,或使用另一个apk的资源

2. 解决方法数超过65536问题

3. 按照需要下载模块,减小项目apk的大小

4.本质上它使用的技术还是热修复技术

5.插件化的灵活性在于是加载apk, 完全可以动态下载,动态更新,比组件化更灵活

③热更新(热修复):可以使用第三方的框架,现在都已经很成熟了如:腾讯提供的Bugly

1. 用于修复已经上线的bug等问题

2. 一般不用于新功能的版本上线

3.强调的是修改线上版本的bug,用技术去实现不更新整个apk的条件下,修改掉bug

热更新两种方式:

>>1.阿里系:DeXposed、andfix:从底层二进制入手(c语言)。

>>2.腾讯系:tinker:从java加载机制入手。通过类加载器加载这些修复好的class,覆盖对应有问题的class,理论上就能修复bug了。

Android平台出现了一些优秀的热更新方案,主要可以分为两类:一类是基于multidex的热更新框架,包括Nuwa、Tinker等;另一类就是native hook方案,如阿里开源的Andfix和Dexposed。这样客户端也有了实时修复线上问题的可能。但经过调研之后,我们发现上述方案或多或少都有一些问题,基于native hook的方案:需要针对dalvik虚拟机和art虚拟机做适配,需要考虑指令集的兼容问题,需要native代码支持,兼容性上会有一定的影响;基于Multidex的方案,需要反射更改DexElements,改变Dex的加载顺序,这使得patch需要在下次启动时才能生效,实时性就受到了影响,同时这种方案在android N [speed-profile]编译模式下可能会有问题。

【Android】热修复——Tinker(入门)

3、组件化的混淆规则:

各个业务组件的混淆配置规则都应该在app壳工程中的混淆配置文件中添加和修改。之所以不采用在每个业务组件中开启混淆的方案,是因为 组件在集成模式下都被 Gradle 构建成了 release 类型的arr包,一旦业务组件的代码被混淆,而这时候代码中又出现了bug,将很难根据日志找出导致bug的原因;另外每个业务组件中都保留一份混淆配置文件非常不便于修改和管理,这也是不推荐在业务组件的 build.gradle 文件中配置 buildTypes (构建类型)的原因。


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

推荐阅读更多精彩内容