Android动态加载技术
安装插件APK
安装插件APK后,可以在主程序中通过包名加载到插件的context,获取到context后就可以加载到插件的资源文件。前提是插件APK和主程序APK的sharedUserId,签名必须相同。此方法可以作为应用更换皮肤的一种解决方案。
注意:由于主程序中没有插件APK资源文件的定义,所有我们无法直接通过R来查找资源ID,需要通过插件APK的资源文件加载:
加载插件资源主要代码:
获取插件context:
获取插件资源:
|
不安装APK
可以通过DexClassLoader加载插件中的类,但插件没安装无法直接获取到apk的context,所以无法直接加载资源。DexClassLoader可以加载apk文件,也可以直接加载dex文件。加载成功后,主要通过反射获取到指定类对象,然后调用其方法处理相关逻辑。
|
参考: http://www.cnblogs.com/over140/archive/2012/03/29/2423116.html
APK动态加载框架
可以下载demo跑一下,看看实现方式,还是挺有意思的。
支持的功能:
1. 插件无需安装即可由宿主程序调起
2. 支持用R访问插件资源;
3. 插件支持Activity和FragmentActivity;
4. 基本无反射调用
5. 插件安装后仍可以独立运行;
6. 支持插件对主程序的调用;
主要解决的问题:
1. 资源管理
2. Activity生命周期的管理
此框架主要通过代理方式实现,插件应用无需安装即可由主程序调起。支持用R访问plugin资源文件。框架主要解决了资源文件访问和Activity的生命周期管理。