Android中apk动态加载技术研究(2)android插件化及实现

了解了android中类加载的前期知识点后,来看看android中DexClassLoader具体的实现 具体加载流程如下: 宿主程序会到文件系统比如SD卡中去加载APK【1】,然后通过一个叫proxy的Activity去执行apk中的Activity 关于动态加载ap,理论上可用用到DexClassLoad、PathClassLoader、URLClassLoader; DexClassLoader: 可以加载文件系统上的jar、dex、apk PathClassLoader:可以加载 /data/app 目录下的apk,这也意味着它只能加载已经安装的apk URLClassLoader:可以加载java中的jar,但由于android中的dalvik不能直接识别jar,所有该方法在android中无法使用,,虽然有这个类 获取AssetsManager 加载的方法是通过反射,通过调用AssetManager中的addAssetPath方法,我们可以将一个apk中的资源加载到Resources中,由于addAssetPath是隐藏api我们无法直接调用,所以只能通过反射,下面是它的声明,通过注释我们可以看出,传递的路径可以是zip文件也可以是一个资源目录,而apk就是一个zip,所以直接将apk的路径传给它,资源就加载到AssetManager中了,然后再通过AssetManager来创建一个新的Resources对象,这个对象就是我们可以使用的apk中的资源了 封装数据: 1:把classLoader、assetManager、resource作为插件的成员,封装成bean 2:多插件时通过Map维护,其中key为apk的packageName 插件加载到内存流程:

加载插件的Activity:

PrxoyActivity接管了所有插件Activity

DXPluginBean 封装bean

DXPluginManager 插件管理核心类

IDXPlugin:

DXIntent:

pluginClassName:跳转的Plugin中指定的ActivityName,可以传null,则默认时跳转main Activity

DXPluginBaseActivity、DXPluginBaseFragmentActivity:

所有插件Activity继承这两个Activity

该Activity实现IDXPlugin接口

onAttach方法中获得proxyActivity的引用

DXProxyActivity、DXProxyFragmentActivity :.

DXPluginInitializer

可以直接参考demo:

版权声明:本文为博主原创文章,未经博主允许不得转载。

敏而好学,不耻下问。

Android中apk动态加载技术研究(2)android插件化及实现

相关文章:

你感兴趣的文章:

标签云: