插件框架实现思路及原理
一、技术可行性
a) apk的安装处理流程
i. apk会copy到/data/app;
ii. 解压apk中的class.dex,并对其进行优化,获得odex(即JIT)。最后保存到/data/dalvik_cache;
iii. 还有一些权限和包信息,会缓存到/data/system中的packages.list和packages.xml中。
b) 在android上,对apk包的加载逻辑
i. 加载逻辑
Zygote(孵化器)在成功启动一Android进程后,会根据packages.list的内容(启动时会加载到system_process中的pakcagemanager中),把odex文件,加载到dalvik中,完成逻辑的加载;
ii. 资源读取
资源读取,主要有两三个类,分别是Resource、AssertManager和LayoutInflater。
当在显示界面时,就通过这三个类读取资源。
c) 结论和猜想
i. apk相对于整个android系统而言,其本身就是一种插件形式体现。根据上面关于逻辑和资源的读取概述,完全是可以静默实现的。其次,class.dex并没有包含Android SDK的代码,只是保留对Android SDK接口的调用。 可以这样想象,Android SDK即插件框架,而Android OS即为整个插件的宿主环境。因此这就可以解释了,为什么在1.x编译的代码,在2.x