Android 动态加载 插件开发

Android动态加载技术

安装插件APK

安装插件APK后,可以在主程序中通过包名加载到插件的context,获取到context后就可以加载到插件的资源文件。前提是插件APK和主程序APKsharedUserId,签名必须相同。此方法可以作为应用更换皮肤的一种解决方案。

注意:由于主程序中没有插件APK资源文件的定义,所有我们无法直接通过R来查找资源ID,需要通过插件APK的资源文件加载:


        

 

加载插件资源主要代码:

获取插件context



 

获取插件资源:



 

 

不安装APK

可以通过DexClassLoader加载插件中的类,但插件没安装无法直接获取到apkcontext,所以无法直接加载资源。DexClassLoader可以加载apk文件,也可以直接加载dex文件。加载成功后,主要通过反射获取到指定类对象,然后调用其方法处理相关逻辑。



 

参考: http://www.cnblogs.com/over140/archive/2012/03/29/2423116.html

 

 

APK动态加载框架

可以下载demo跑一下,看看实现方式,还是挺有意思的。

支持的功能:

1.       插件无需安装即可由宿主程序调起

2.       支持用R访问插件资源;

3.       插件支持ActivityFragmentActivity

4.       基本无反射调用

5.       插件安装后仍可以独立运行;

6.       支持插件对主程序的调用;

主要解决的问题:

1.       资源管理

2.       Activity生命周期的管理

         此框架主要通过代理方式实现,插件应用无需安装即可由主程序调起。支持用R访问plugin资源文件。框架主要解决了资源文件访问和Activity的生命周期管理。

         参考:https://github.com/singwhatiwanna/dynamic-load-apk

         

 

猜你喜欢

转载自markjoker.iteye.com/blog/2238421