android插件化研究
2015-08-30 21:15
246 查看
使用
1、总共三个工程,包名分别为com.wallj.main/com.wallj.spring/com.wallj.summer
其中com.wallj.main为主工程,其他两个为插件工程,均只为主工程提供资源。
三个工程需要使用同一个 android:sharedUserId="
设置了该属性后,三个工程之间的ClassLoader可以相互之间访问资源。(有时候为了给app以root权限,也会使用到这个属性,来共用系统的uid,但是需要系统支持)
2、在com.wallj.main工程中通过DexClassLoader加载插件的dex,判断其sharedUserId是否与主工程一致。或者是做为单独app安装过的插件的话,也可以通过其他packageManager先从已安装列表中拿到该应用的包信息,之后判断sharedUserId是否与主工程一致。
3、判断一致后,应该是已经拿到了包名等等应用信息,然后就可以通过反射加载出来其中的R.java,根据R.java拿到其中的资源文件id,通过包名等信息拿到该应用的context信息,使用context以及资源id便可以查找到该资源文件(例如:图片资源),拿到资源文件之后就可以随心所欲了。
如果并不是想使用其中的资源文件,而是想调用其中的类,启动其中的Activity的话,应该就是只能在第二步的时候,去加载想要使用到的类文件,但是Activity是不能new出来的的,这是个问题。
具体细节还没有实践过,这里只做记录
JVM以及Dalvik对类唯一的识别是ClassLoader id + PackageName + ClassName,所以一个运行中的程序是有可能存在两个包名和类名完全一致的类的。
android:sharedUserId="com.wallj.skin"
1、总共三个工程,包名分别为com.wallj.main/com.wallj.spring/com.wallj.summer
其中com.wallj.main为主工程,其他两个为插件工程,均只为主工程提供资源。
三个工程需要使用同一个 android:sharedUserId="
com.wallj.skin"以达到资源共享的目的。
设置了该属性后,三个工程之间的ClassLoader可以相互之间访问资源。(有时候为了给app以root权限,也会使用到这个属性,来共用系统的uid,但是需要系统支持)
2、在com.wallj.main工程中通过DexClassLoader加载插件的dex,判断其sharedUserId是否与主工程一致。或者是做为单独app安装过的插件的话,也可以通过其他packageManager先从已安装列表中拿到该应用的包信息,之后判断sharedUserId是否与主工程一致。
3、判断一致后,应该是已经拿到了包名等等应用信息,然后就可以通过反射加载出来其中的R.java,根据R.java拿到其中的资源文件id,通过包名等信息拿到该应用的context信息,使用context以及资源id便可以查找到该资源文件(例如:图片资源),拿到资源文件之后就可以随心所欲了。
如果并不是想使用其中的资源文件,而是想调用其中的类,启动其中的Activity的话,应该就是只能在第二步的时候,去加载想要使用到的类文件,但是Activity是不能new出来的的,这是个问题。
具体细节还没有实践过,这里只做记录
JVM以及Dalvik对类唯一的识别是ClassLoader id + PackageName + ClassName,所以一个运行中的程序是有可能存在两个包名和类名完全一致的类的。
相关文章推荐
- 认识 Android Service
- Android之 ListActivity 的使用和在 ListView中添加图片文字(ListActivity与Activity的区别)
- Android控件之TimePickerDialog、DatePickerDialog和自定义DialogPopupWindow与NotificationManager
- Android线程的相关使用
- Android开发详解之onTouch和onClick详解
- android-屏幕适配(一)
- android判断外存储卡是否安装并新建文件夹
- Android源码解析--超好看的下拉刷新动画
- Android之测试前期那点事
- Android中的音频播放(MediaPlayer和SoundPool)
- Android学习笔记(十五)
- android如何实现账号注销功能
- Android 去掉窗口标题和程序全屏
- Android-使用Android studio 进行NDK-JNI开发实例(一)
- Android入门第八篇之GridView(九宫图)
- Android 中的WiFi剖析
- 地图经纬度坐标与屏幕坐标的转换(android版)
- Android & IOS视频录制技术方案
- Android的drawText()参数详解
- Android 中 Context 的理解及使用