收藏本站
博为峰Android开发培训Banner
您所在的位置:博为峰教育首页 > 资料精选 > 学习资料 > 【学习资料】Android系统之插件化开发

【学习资料】Android系统之插件化开发

   发布时间:2015年02月25日 09:12分    来源:博为峰教育网采编    关键词:Android开发,插件     | 上一篇 | 下一篇 |


Android系统之插件化开发图片1

     

Android系统之插件化开发背景交代

     首先,你需要知道什么是插件化开发。就拿最常见的QQ来说,在第三个界面动态那里有个管理,点开后能够选择很多的增植功能,这里腾讯只放了一些网页应用,那么如果未来想加入一个打飞机游戏,要怎么做?让用户重新安装吗,这就是插件化开发能解决的问题。

     用一句话来概括插件式开发:你基本上可以理解为让一个apk不安装也可以被运行。只不过这个运行是有很多限制的运行,所以才叫插件否则就叫病毒了。其实在目前淘宝、百度、腾讯、等都有成熟的动态加载框架,包括apkplug,但是它们都是不开源的。

     说一下我认为这项技术的难点:

     1、一个未被安装的apk正常情况无法被运行;

     2、这个apk的资源没办法被引用;

     3、这个apk的界面就算被加载,也没办法与用户交互。

     最初查遍了资料,第一点好解决,在Android中有一个dexClassLoad类加载器,大家应该明白了,就是通过反射加载一个类来运行。第二点,网上有两种方法:可以将插件的资源放到sd卡上通过流的形式读取,不过也有人反对说用流读取会有问题,通配性太差;一种比较好的解决办法是将apk中的资源复制一份到当前app内,然后就可以加载了。这种办法是不错,但是用户每下载一次插件就复制一份,久而久之,对空间要求太高了,还有就是第三点也没办法解决。而第三点,在github上有一个叫Android Dynamic Loader的项目,是通过用Fragment做为插件的表现形式,由于Fragment特殊性(既能够处理逻辑交互又具备与Activity一样的生命周期)。可是Fragment限制性太大了,太过碎片化使得使用起来复杂性过高。直到我找到了一篇360的官方博客,博客给了一种思路:通过代理/委托模式设计的Application类去动态的改变一个apk所在的环境,实现动态加载的目的。抱着这种思路,我曾想自己去设计一个application类,但是技术有限,太复杂了,于是结合Android Dynamic Loader的思路与360的思路,我自己设计了一个Activity去代理插件的Activity,于是就有了CJ Frame For Android.

Android系统之插件化开发原理描述

     首先解释几个名词:
     APP项目:指要调用插件apk的那个已经安装到用户手机上的应用。
     插件项目:指没有被安装且希望借助已经安装到手机上的项目运行的apk。
     插件化:Activity继承自CJActivity,且与APP项目jar包冲突已经解决的插件项目称为已经被插件化。
     Activity事务:在CJ Frame For Android中,一个Activity的生命周期以及交互事件统称为Activity的事务。
     托管所:指插件中的一个委派/代理Activity,通过这个Activity去处理插件中Activity的全部事务,从而表现为就像插件中的Activity在运行一样。