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要么添加编译插件);有的方案选择独立资源,不同插件管理自己的资源。

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

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

最新文章

  1. SuiteScript > Apply script to Assembly and Kit
  2. Python3
  3. Sql server中访问Excel---select from Excel
  4. KlayGE 4.4中渲染的改进(二):DR的其他改进
  5. ArcGIS Javascript地图上添加json数据格式的点
  6. M5: 使用StorageFile
  7. Django项目中model增加了新字段怎样更新?
  8. PRINCE2七大原则(1)
  9. Android模拟器——Genymotion
  10. 单选按钮易忽略的Group属性
  11. SDN学习之RYU源码安装
  12. 关于php的命名空间
  13. mac 配置虚拟主机
  14. 机器学习基石:02 Learning to Answer Yes/No
  15. Graphic
  16. 基于jeesite的cms系统(五):wangEditor富文本编辑器
  17. Markdown初入门(使用Typora编辑)
  18. JavaScript原型(第五天)
  19. 天然气管道Gaz[POI2007]
  20. golang 中 channel 的非阻塞访问方法

热门文章

  1. scala -- 柯里化
  2. spring中的BeanFactory和FactoryBean的区别与联系
  3. MySql的基本架构续
  4. ASP.NET中的URL编码解码(转)
  5. [leetcode]785. Is Graph Bipartite? [bai'pɑrtait] 判断二分图
  6. Python学习记录day8
  7. NPOI导入导出Excel数据
  8. Tomcat端口被占用解决方法
  9. 团队项目:二次开发--v.2.1--软件工程
  10. PAT 1078 字符串压缩与解压(20)(代码+思路)