android模块化组件化include,Android 模块化 组件化 插件化

1 模块化 将我们项目中一些公共的功能单独的抽取出来,形成一个独立的,可以被公用的模块。通常在Android开发中,我们用AS新建的一个Module就可以看作是一个模块。

为什么要是用模块化? 因为随着项目的不断扩张,功能越来越多,项目回越来越大。我们一直提倡kiss原则,就是提倡简单。所以就需要化繁为简,把项目可以拆成一些相对较小的模块,这样保持简单的同时,也能够做到单一职责原则。

2组件化:组件化是依赖模块化的。我们把项目化繁为简,拆成不同的功能模块,各个模块都可以完成一个独立业务功能,但是怎么把这些相互独立又相互配合的独立业务组合在一起,那就又出现了组件化的概念。

因为大型的app一般都是多人开发,每一个模块都是相应的人员单独负责,所以这些模块在调试测试阶段可以单独进行编译测试,这样即能让模块进行单元测试,也能提高编译时间。各个独立的模块都测试通过了,然后在最后的打包发版阶段,把这些独立的模块在一起打包成一个完成的apk包。

组件化过程中一个核心的问题就是各个模块之间的相互通信问题。因为各个模块之间是不会之间相互依赖的。想要从A模块跳转到B模块, 就需要依赖路由了。(ARoute)。虽然各个模块之间不会相互依赖,但是都需要依赖我们公共的底层路由模块。然后通过注解,将所有使用注解标注的地方,都添加到一个路由表里面。这样在模块之间跳转的时候,就会先去这个路由表中查找对于的目标地址,找到后就可以跳转过去了。(Flutter也是这么处理的)

3插件化:插件化也是依赖于组件化的,他与组件化的不同在于不同的插件(就是那些模块)都是一个单独的apk包。每个插件都是可以单独安装运行的。那这又有什么好处呢?

像微信,支付宝这样的超级app,他除了自己的功能业务之外,里面也放了很多第三方的app的相关链接,如果把这些第三方的app都做成独立的组件,那整个微信或者支付宝打包出来的包就会非常的大,这个显然不现实。但是使用插件话就可以解决这个问题。这些单独的功能apk都是可以单独运行的。我们在打包的时候只需要把我们的核心组件打包发版就可以了。如果有的用户需要使用里面的其他服务,到时候在下载一个轻量级的apk,然后加载进来就可以了。

这里的动态加载就需要用到一个APK的动态加载机制了,热修复的原理也是一样的。需要用到Android中的ClassLoader

这又需要从一个Java文件如果被加载到jvm内存中说起了

一个Java文件需要先被编译成class文件,然后在用到的时候被ClassLoader加载到jvm中。Java中的ClassLoader采用的是双亲委推机制进行类加载的。Java中通常有三个默认的ClassLoader, 分别是AppClassLoader ExtClassLoader,BootstrapClassLoader.双亲委推机制就是当一个类需要加载的时候,先调用AppClassloader,这个时候会先判断这个类有没有被加载进来,如果加载了,就创建相应的对象,如果没有,先会委托给ExtClassLoader去加载这个类,Ext和BootStrap这两个加载器都是从指定的目录中加载,如果能从指定的目录中找到相应的class文件,那就加载,找不到,最后再回来让AppClassLoader加载。

Android中的类加载器分为两个,PathClassLoader 和 DexClassLoader, Path就是从我们apk 的安装目录加载相应的dex,DexClassLoader可以从任意路径下面加载,所以当我们下载一个新的apk到手机中的SD卡中后,就可以使用DexClassLoader加载里面的dex文件了。

Tinker的热修复就是利用的这个原理来实现的热修复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值