APK动态加载框架(DL)解析

               

转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/39937639 (来自singwhatiwanna的csdn博客)

前言

好久没有发布新的文章,这次打算发表一下我这几个月的一个核心研究成果:APK动态加载框架(DL)。这段时间我致力于github的开源贡献,开源了2个比较有用且有意义的项目,一个是PinnedHeaderExpandableListView,另一个是APK动态加载框架。具体可以参见我的github:https://github.com/singwhatiwanna

本次要介绍的是APK动态加载框架(DL),这个项目除了我以外,还有两个共同开发者:田啸(时之沙),宋思宇。

为了更好地理解本文,你需要首先阅读Android apk动态加载机制的研究这一系列文章,分别为:

Android apk动态加载机制的研究

Android apk动态加载机制的研究(二):资源加载和activity生命周期管理

另外,这个开源项目我起了个名字,叫做DL。本文中的DL均指APK动态加载框架。

项目地址

https://github.com/singwhatiwanna/dynamic-load-apk,欢迎star和fork。

运行效果图:

意义

这里说说这个开源项目的意义。首先要说的是动态加载技术(或者说插件化)在技术驱动型的公司中扮演这相当重要的角色,当项目越来越庞大的时候,需要通过插件化来减轻应用的内存和cpu占用,还可以实现热插拔,即在不发布新版本的情况下更新某些模块。

我几个月前开始进行这项技术的研究,当时查询了很多资料,没有找到很好的开源。目前淘宝、微信等都有成熟的动态加载框架,包括apkplug,但是它们都是不开源的。还有github上有一个开源项目AndroidDynamicLoader,其思想是通过Fragment 以及 schema的方式实习的,这是一种可行的技术方案,但是还有限制太多,这意味这你的activity必须通过Fragment去实现,这在activity跳转和灵活性上有一定的不便,在实际的使用中会有一些很奇怪的bug不好解决,总之,这还是一种不是特别完备的动态加载技术。然后,我发现,目前针对动态加载这一块成熟的开源基本还是空白的,不管是国内还是国外。而在公司内部,动态加载作为一项核心技术,也不可能是初级开发人员所能够接触到的,于是,我决定做一个成熟点的开源,期待能填补这一块空白。

DL功能介绍

DL支持很多特性,而这些特性使得插件的开发过程变得透明、高效。

1. plugin无需安装即可由宿主调起。

2. 支持用R访问plugin资源
3. plugin支持Activity和FragmentActivity(未来还将支持其他组件)

4. 基本无反射调用 

5. 插件安装后仍可独立运行从而便于调试

6. 支持3种plugin对host的调用模式:
   (1)无调用(但仍然可以用反射调用)。
   (2)部分调用,host可公开部分接口供plugin调用。 这前两种模式适用于plugin开发者无法获得host代码的情况。

   (3)完全调用,plugin可以完全调用host内容。这种模式适用于plugin开发者能获得host代码的情况。

7. 只需引入DL的一个jar包即可高效开发插件,DL的工作过程对开发者完全透明

8. 支持android2.x版本

架构解析

如果大家阅读过本文头部提到的两篇文章,那么对DL的架构应该有大致的了解,本文就不再从头开始介绍了,而是从如下变更的几方面进行解析,这些优化使得DL的功能和之前比起来更加强大更加易用使用易于扩展。

1. DL对activity生命周期管理的改进

2. DL对类加载器的支持(DLClassLoader)

3. DL对宿主(host)和

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值