1.按照 https://github.com/didi/VirtualAPK 说明进行接入 注意在插件 app build下载 引入 compile'com.didi.virtualapk:core:0.9.0' 由于官方没有说明 否则会出现问题
2.接入可参考 http://www.jianshu.com/p/013510c19391 关键点是下面常见错误解法
宿主和插件使用的sdk必须一致 否则 跳转插件的时候出现错误
3.插件与宿主中的资源命名(layout drawable) 不要重名 否则会出问题
4.切记按照官方的步骤来 要不坑太多 里面的 限制也比较多 支持的还不否广
源码分析 :
application初始化:
PluginManager.getInstance(base).init();
/./此处修改应用的classloader 优先了解classloader加载机制 (先查找自身classloader 是否有缓存 没有的话 先parent classloader加载类 找到加载内存 缓存 找不到的话在自身查找 原则---自上而下 查找)
classloader --- pathList -- dexElements
1.先利用dexclassloder加载插件的apk,
2.利用反射加载插件中的 dexelements
3.加载宿主中的dexelements
4.将两个dexelments合并 利用hook basedexclassloader中的 dexelements 这样就能加载到插件中的class了
//这面这个方法 不知道何时用
broadcastReciver采用动态注册
启动activity追踪源码 进入到vaubstrunebtation
//获取代理activity
资源查找过程:
https://www.notion.so/VirtualAPK-1fce1a910c424937acde9528d2acd537
//老罗的资源方面源码解析
http://blog.csdn.net/luoshengyang/article/details/8791064
http://blog.csdn.net/luoshengyang/article/details/8744683
网友评论