2015年是Android插件化技术突飞猛进的一年,随着业务的发展各大厂商都碰到了Android Native平台的瓶颈:

  1. 从技术上讲,业务逻辑的复杂导致代码量急剧膨胀,各大厂商陆续出到65535方法数的天花板;同时,运营为王的时代对于模块热更新提出了更高的要求。
  2. 在业务层面上,功能模块的解耦以及维护团队的分离也是大势所趋;各个团队维护着同一个App的不同模块,如果每个模块升级新功能都需要对整个app进行升级,那么发布流程不仅复杂而且效率低下;在讲究小步快跑和持续迭代的移动互联网必将遭到淘汰。

H5和Hybird可以解决这些问题,但是始终比不上native的用户体验;于是,国外的FaceBook推出了react-native;而国内各大厂商几乎都选择纯native的插件化技术。可以说,Android的未来必将是react-native和插件化的天下。

react-native资料很多,但是讲述插件化的却凤毛菱角;插件化技术听起来高深莫测,实际上要解决的就是两个问题:

  1. 代码加载
  2. 资源加载

代码加载

类的加载可以使用Java的ClassLoader机制,但是对于Android来说,并不是说类加载进来就可以用了,很多组件都是有“生命”的;因此对于这些有血有肉的类,必须给它们注入活力,也就是所谓的组件生命周期管理

另外,如何管理加载进来的类也是一个问题。假设多个插件依赖了相同的类,是抽取公共依赖进行管理还是插件单独依赖?这就是ClassLoader的管理问题

资源加载

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

目前国内开源的较成熟的插件方案有DL和DroidPlugin;但是DL方案仅仅对Frameworl的表层做了处理,严重依赖that语法,编写插件代码和主程序代码需单独区分;而DroidPlugin通过Hook增强了Framework层的很多系统服务,开发插件就跟开发独立app差不多;就拿Activity生命周期的管理来说,DL的代理方式就像是牵线木偶,插件只不过是操纵傀儡而已;而DroidPlugin则是借尸还魂,插件是有血有肉的系统管理的真正组件;DroidPlugin Hook了系统几乎所有的Sevice,欺骗了大部分的系统API;掌握这个Hook过程需要掌握很多系统原理,因此学习DroidPlugin对于整个Android FrameWork层大有裨益。

接下来的一系列文章将以DroidPlugin为例讲解插件框架的原理,揭开插件化的神秘面纱;同时还能帮助深入理解Android Framewrok;主要内容如下:

  • Hook机制之动态代理
  • Hook机制之Binder Hook
  • Hook机制之AMS&PMS
  • Activity生命周期管理
  • 插件加载机制
  • 广播的管理方式
  • Service的插件化
  • ContentProvider的插件化
  • DroidPlugin插件通信机制
  • 插件机制之资源管理
  • 不同插件框架方案对比
  • 插件化的未来

另外,对于每一章内容都会有详细的demo,具体见understand-plugin-framework;喜欢就点个关注吧~定期更新,敬请期待!

原文地址: http://weishu.me/2016/01/28/understand-plugin-framework-overview/

Android插件化原理解析——概要相关推荐

  1. Android 插件化原理解析——Activity生命周期管理

    之前的 Android插件化原理解析 系列文章揭开了Hook机制的神秘面纱,现在我们手握倚天屠龙,那么如何通过这种技术完成插件化方案呢?具体来说,插件中的Activity,Service等组件如何在A ...

  2. Android 插件化原理解析——Hook机制之AMSPMS

    在前面的文章中我们介绍了DroidPlugin的Hook机制,也就是代理方式和Binder Hook:插件框架通过AOP实现了插件使用和开发的透明性.在讲述DroidPlugin如何实现四大组件的插件 ...

  3. Android插件化原理解析

    概述 Android插件化技术,可以实现功能模块的按需加载和动态更新,其本质是动态加载未安装的apk. 本文涉及源码为API 28 插件化原理 插件化要解决的三个核心问题: 类加载. 资源加载. 组件 ...

  4. Android插件化原理解析——ContentProvider的插件化

    目前为止我们已经完成了Android四大组件中Activity,Service以及BroadcastReceiver的插件化,这几个组件各不相同,我们根据它们的特点定制了不同的插件化方案:那么对于Co ...

  5. Android 插件化原理解析——Service的插件化

    在 Activity生命周期管理 以及 广播的管理 中我们详细探讨了Android系统中的Activity.BroadcastReceiver组件的工作原理以及它们的插件化方案,相信读者已经对Andr ...

  6. Android插件化原理解析——广播的管理

    在Activity生命周期管理 以及 插件加载机制 中我们详细讲述了插件化过程中对于Activity组件的处理方式,为了实现Activity的插件化我们付出了相当多的努力:那么Android系统的其他 ...

  7. Android插件化原理解析——Hook机制之动态代理

    使用代理机制进行API Hook进而达到方法增强是框架的常用手段,比如J2EE框架Spring通过动态代理优雅地实现了AOP编程,极大地提升了Web开发效率:同样,插件框架也广泛使用了代理机制来增强系 ...

  8. Android 插件化原理解析——插件加载机制

    上文 Activity生命周期管理 中我们地完成了『启动没有在AndroidManifest.xml中显式声明的Activity』的任务:通过Hook AMS和拦截ActivityThread中H类对 ...

  9. Android插件化原理解析——Hook机制之Binder Hook

    Android系统通过Binder机制给应用程序提供了一系列的系统服务,诸如ActivityManagerService,ClipboardManager, AudioManager等:这些广泛存在系 ...

最新文章

  1. linspace python_python np.linspace
  2. MySQL触发器使用详解
  3. 信息论2——单维连续信源
  4. Linux mkdir 命令创建多级目录
  5. Kolor Panotour Pro 使用方法
  6. 面向对象上机题-迭归算法
  7. 学习笔记-Little Tips_day20170615-\n and '\n'
  8. latex插入图片之后出现大段空白,并且紧随其后的文字如同被覆盖一般不见了
  9. docker 安装 与 卸载 centos
  10. mybatis萌新基础
  11. EPCS 无法配置FPGA的解决方法以及JTAG、AS调试总结
  12. 安装webpack命令环境
  13. 河北省农村居民家庭平均每百户家用计算机拥有量,2013-2015年全国居民家庭平均每百户计算机拥有量统计...
  14. rasa-x安装教程
  15. VS201x的项目属性配置
  16. cass小插件集合_CAD面积插件大全_CAD插件大全_CASS插件大全_小懒人CAD插件老妈砂锅串串香加盟...
  17. 2022年mysql国家法定节假日脚本
  18. Java数据结构与算法
  19. CENTOS上的网络安全工具(十六)容器特色的Linux操作
  20. html 显示doc文件

热门文章

  1. mysqldump表损坏问题
  2. MongoDB 进阶-关联查询
  3. Spring MVC 入门
  4. 学习笔记:Windows 下Keras安装和配置指南
  5. 科学计算:Python VS. MATLAB(4)----图形系统简介
  6. pip升级之后出现no module named pip
  7. 【Python】字典(Dictionary) items()方法
  8. 【算法】一个简单的K近邻(KNN)原理
  9. Report20200828螺旋波等离子体推力器HPT模拟放电调试小结
  10. [云炬创业基础笔记]第七张创业团队测试5