关闭

Android-Apk插件化研究

533人阅读 评论(0) 收藏 举报
分类:




http://www.zhihu.com/question/19981105


android插件开发机制研究

  

  在java开发中随处可见使用jar包的插件机制进行开发,但在android中,目前较成熟的插件机制基本没有,看到的有两篇帖子中提到了重写dexclassloader可以完美的解决插件问题,但都只简要描述了原理,没有源码或关键代码,目前对网络中的思路进行总结.

  目前插件包有两种格式:一种是apk,一种是dex包.对插件的接入机制来说也有两种:一种是需要安装,一种是不需要安装.结合插件包的格式来说插件的方式只有三种:1,apk安装,2,apk不安装,3,dex包.三种方式其实主要是解决两个方面的问题:1,加载插件中的类,2,加载插件中的资源.第一个加载类的问题,这三个方式都可以很好的解决.但目前三种方式都没有很完美的解决第2个问题.下面分别总结下这三种方式网络上和自己实践出来的一些结论:

  1,apk安装方式.插件apk安装后,可以在主程序中通过包名加载到插件的context,有了插件的context就可以解决加载插件资源的问题.但出现的新问题是:如果插件a,b,c间公用一个底层jar包,那么在abc间传送数据时,需要进行序列化和反序列化,因为a中jar包的data类与b中jar包的data类虽然都是同样的jar包也是同样的类,但两个类在java机制来是由不同的classloader加载的,是不同的类.那么就会出现插件间jar包冗余和数据传递的效率不好问题.总之能解决问题.

  2,apk不安装,这个是不推荐的方式.可以通过dexclassloader加载到插件a中的类,但插件没有安装就无法获得插件apk的context,也就无法加载到资源,网络上有牛人通过将主程序的context替换关键的对象(如classloader,assertmanager等),伪造成插件的context,然后通过伪context也可以获得插件资源.目前个人验证的问题为:获取到的layout资源中的textview显示文本有问题,无法显示在layout设定的文本.同时个人猜测这种hack的方式或许有其它的未知的问题,但不排除高手已经解决了这个问题.

  3,dex包,这个基本是java开发中jar包的方式.同样通过dexclassloader加载到插件中的类,但依旧没有context,也无法加载到资源.要使用布局,只能在插件中使用java代码来写布局.这种方式最简单(1,类似jar包的方式,也可以随意导出单个类的jar包然后转化为dex包,不存在打包成apk需要完整的工程和依赖关系的要求.2,底层的公用jar包所有插件可以公共一个,传递数据不用反复的序列化和反序列化.),也是最复杂的(布局文件全部代码写,难调试,难维护).

 

参考资料:

1,android-application-plug-ins-frame-work

     https://code.google.com/p/android-application-plug-ins-frame-work/

   2,Android动态加载代码技术

     http://www.cnblogs.com/frydsh/archive/2012/12/21/2828561.html

   3,Android基于类装载器插件架构的实现   http://wenku.baidu.com/link?url=zrm8bGJeYOE5Z3REHLSITdGI28g-1jz2Kw_QWqWrFDHHRGnZq2W_Y3olKe5scn7ysD77Mw8INWfAtQshYKoD-9AdPgeSQgK5dnvIwU_YzbW

 4, Android动态加载(上)——加载未安装APK中的类

http://www.cnblogs.com/over140/archive/2011/11/23/2259367.html

 http://www.cnblogs.com/over140/archive/2012/03/29/2423116.html

5.Android Dynamic Loader框架(https://github.com/mmin18/AndroidDynamicLoader)

6,安卓应用程序插件化开发框架 -AAP Framework https://code.google.com/p/android-application-plug-ins-frame-work/

7,XCombine https://github.com/wyouflf/xCombine


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    风色年代——不只是技术!

    有问题?欢迎到公众号下留言^ ^
    个人资料
    • 访问:1570671次
    • 积分:16205
    • 等级:
    • 排名:第671名
    • 原创:44篇
    • 转载:570篇
    • 译文:4篇
    • 评论:206条
    公告
    本博收藏大部分文章为转载,并在文章开头给出了原创作者及原文出处,如有再转,敬请保留相关信息,这是大家对原创作者劳动成果的自觉尊重!!
    早期遗留的部分文章未能及时给出相关原创信息,在此谨致歉意,后续会尽全力予以纠正。如为您带来不便,请于本博下留言,谢谢配合。