美文网首页Android 知识
未来React Native会取代插件化吗?

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

作者: 菜鸟窝 | 来源:发表于2017-10-24 14:20 被阅读342次

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

    【RN会取代插件化吗?】

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

    【插件化技术解析】

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

    •代码加载

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

    •资源加载

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

    【插件化开源项目推荐】

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

    ▎DroidPlugin


    Github:https://github.com/DroidPluginTeam/DroidPlugin

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

    ▎Small


    Github:https://github.com/wequick/Small

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

    ▎VirtualAPK


    github:https://github.com/didi/VirtualAPK

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

    ▎RePlugin


    GitHub:https://github.com/Qihoo360/RePlugin

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

    RePlugin各特性描述:

    插件数
    103(核心57个)

    插件占应用比
    高达83%

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

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

    时间
    2014年应用,3年验证

    ▎Android-Plugin-Framework


    GitHub:https://github.com/limpoxe/Android-Plugin-Framework

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

    ▎DL动态加载框架


    Github:https://github.com/singwhatiwanna/dynamic-load-apk

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

    ▎AndroidDynamicLoader


    GitHub:https://github.com/mmin18/AndroidDynamicLoader

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


    ▎DynamicAPK


    GitHub:https://github.com/CtripMobile/DynamicAPK

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

    ▎ACDD


    GitHub:https://github.com/bunnyblue/ACDD/blob/master/README-Zh.md

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


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

    image.png

    相关文章

      网友评论

      本文标题:未来React Native会取代插件化吗?

      本文链接:https://www.haomeiwen.com/subject/qsgtpxtx.html