未来React Native会取代插件化吗?

1,395 阅读5分钟

Android插件化技术真正在国内得到迅速发展,是在2015年。
那时业务的发展暴露了Android Native的两大问题:
一是技术上代码量急剧膨胀,模块热更新有了更高要求;
二是功能模块的解耦以及维护团队的分离是大势所趋。

【RN会取代插件化吗?】

H5和Hybird可以解决这些问题,但是始终比不上native的用户体验。所以纯native的插件化技术在国内各大厂商中得到了广泛的应用。但有观点认为比起插件化,RN会是真正实现动态化的最佳方式。
不过至少目前插件化技术在中国是有市场的,比如做一款电商或旅游类的APP,非常频繁需要使用四大组件,四大组件又必须实现插件化。所以国内Android的未来必将是RN和插件化的天下。

【插件化技术解析】

插件化技术听起来高深莫测,实际上要解决的就是两个问题:代码加载和资源加载。

•代码加载

类的加载可以使用Java的ClassLoader机制,但是对于Android来说,并不是说类加载进来就可以用了,很多组件都是有“生命”的;因此对于这些有血有肉的类,必须给它们注入活力,也就是所谓的组件生命周期管理;
另外,如何管理加载进来的类也是一个问题。假设多个插件依赖了相同的类,是抽取公共依赖进行管理还是插件单独依赖,这就是ClassLoader的管理问题。

•资源加载

资源加载方案大家使用的原理都差不多,都是用AssetManager的隐藏方法addAssetPath;但是,不同插件的资源如何管理?是公用一套资源还是插件独立资源?共用资源如何避免资源冲突?对于资源加载,有的方案共用一套资源并采用资源分段机制解决冲突(要么修改aapt要么添加编译插件);有的方案选择独立资源,不同插件管理自己的资源。

【插件化开源项目推荐】

下面介绍国内应用极多的插件化开源项目:

▎DroidPlugin


Github:github.com/DroidPlugin…

介绍:
DroidPlugin 是 360 手机助手实现的一种插件化框架,它可以直接运行第三方的独立 APK 文件,完全不需要对 APK 进行修改或安装。一种新的插件机制,一种免安装的运行机制,是一个沙箱, 是模块化的基础。
DroidPlugin 插件机制 :它可以在无需安装、修改的情况下运行APK文件,此机制对改进大型APP的架构,实现多团队协作开发具有一定的好处。

▎Small


Github:github.com/wequick/Sma…

介绍:
Small 是一种实现轻巧的跨平台插件化框架,基于“轻量、透明、极小化、跨平台”的理念。

▎VirtualAPK


github:github.com/didi/Virtua…

介绍:
VirtualAPK 是滴滴开源的一套插件化框架,支持几乎所有的 Android 特性,四大组件方面。
VirtualAPK 对插件没有额外的约束,原生的 apk 即可作为插件。插件工程编译生成 apk后,即可通过宿主 App 加载,每个插件 apk 被加载后,都会在宿主中创建一个单独的 LoadedPlugin 对象。通过这些 LoadedPlugin 对象,VirtualAPK 就可以管理插件并赋予插件新的意义,使其可以像手机中安装过的App 一样运行。

▎RePlugin


GitHub:github.com/Qihoo360/Re…

介绍:
RePlugin是一套完整的、稳定的、适合全面使用的,占坑类插件化方案,由360手机卫士的RePlugin Team研发,也是业内首个提出”全面插件化“(全面特性、全面兼容、全面使用)的方案。
目前360公司几乎所有的亿级用户量的APP,以及多款主流第三方APP,都采用了RePlugin方案。

RePlugin各特性描述:

插件数
103(核心57个)

插件占应用比
高达83%

年发版次数
高达596次(工作日均2次)

崩溃率
万分之一(0.01%),极低

时间
2014年应用,3年验证

▎Android-Plugin-Framework


GitHub:github.com/limpoxe/And…

介绍:
Android-Plugin-Framework是一个Android插件化框架,用于通过动态加载的方式免安装运行插件apk。
尽管此框架支持独立插件,但目标并不是为了支持任意三方app,不同于平行空间或应用分身之类的产品。框架的做法是按需hook,即需要用到哪些系统特性和api,就对哪些特性和api提供支持。这种做法对开发非独立插件和二方独立插件而言完全足够。

▎DL动态加载框架


Github:github.com/singwhatiwa…

介绍:
DL框架动态加载主要解决两个复杂的问题:资源的访问和activity生命周期的管理。除此之外,DL框架也很好地解决了许多坑爹的小问题。需要说明的一点是,我们不可能调起任何一个未安装的apk,这在技术上是很难实现的,我们调起的apk必须受某种规范的约束,只有在这种约束下开发的apk,我们才能将其调起。

▎AndroidDynamicLoader


GitHub:github.com/mmin18/Andr…

介绍:
Android 动态加载框架,他不是用代理 Activity 的方式实现而是用 Fragment 以及 Schema 的方式实现。可以下载演示:


▎DynamicAPK


GitHub:github.com/CtripMobile…

介绍:
实现Android App多apk插件化和动态加载,支持资源分包和热修复。携程App的插件化和动态加载框架。

▎ACDD


GitHub:github.com/bunnyblue/A…

介绍:
非代理Android动态部署框架,代码遵循MIT License,Activity 、Receiver支持stub模式,有bug的话可以在issue里面提交。
Gif演示动画
github.com/bunnyblue/A…


Android资深工程师成长计划系列课程之《热修复和插件化专题》限20个优惠名额,
想学好本课程先掌握NDK和JNI基础↓↓↓

image.png
image.png