转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/39937639 (来自singwhatiwanna的csdn博客)前言好久没有发布新的文章,这次打算发表一下我这几个月的一个核心研究成果:APK动态加载框 ...
转载请注明出处: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。
运行效果图:下面分别介绍上述三种模式,针对上述三种模式,我们分别提供了3组例子,其中:
1. depend_on_host:插件完全依赖宿主的模式,适合于能够能到宿主的源代码的情况
其中host指宿主工程,plugin指插件工程
2. depend_on_interface:插件部分依赖宿主的模式,或者说插件依赖宿主提供的接口,适合能够拿到宿主的接口的情况
其中host指宿主工程,plugin指插件工程,common指接口工程
3. main:插件不依赖宿主的模式,这是DL推荐的模式
其中host指宿主工程,plugin指插件工程
模式1:这是DL推荐的模式,对应的工程目录为main。在这种模式下,宿主和插件不需要通信,两者是独立开发的,宿主引用DL的jar包(dl-lib.jar),插件也需要引用DL的jar包,但是不能放入到插件工程的libs目录下面,换句话说,就是插件编译的时候依赖jar包但是打包成apk的时候不要把jar包打进去,这是因为,dl-lib.jar已经在宿主工程中存在了,如果插件中也有这个jar包,就会发生类链接错误,原因很简单,内存中有两份一样的类,重复了。至于support-v4也是同样的道理。对于eclipse很简单,只需要在插件工程中创建一个目录,比如external-jars,然后把dl-lib.jar和support-v4.jar放进去,同时在.classpath中追加如下两句即可:
<classpathentry kind="lib" path="external-jars/dl-lib.jar"/>
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:APK动态加载框架(DL)解析
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。