今天看了下动态加载相关的一些东西,记录一下:

一:原理

一听动态加载肯定就和classloader有关,Android中的动态加载自然也不例外。由于Android是采用dalvik虚拟机,所以在Android中可以使用的classloader只有DexClassLoader和PathClassLoader两种了。这两种主要的区别就是DexClassLoader可以加载任何路径的apk/dex/jar,而PathClassLoader只能加载/data/app中的apk,也就是已经安装到手机中的apk。这个也是PathClassLoader作为默认的类加载器的原因,因为一般程序都是安装了,在打开,这时候PathClassLoader就去加载指定的apk(解压成dex,然后在优化成odex)就可以了。

二:动态加载jar过程

1.在app中定义动态加载部分的接口,创建实现该接口的动态加载类,导出该类文件的jar包,利用”..\android_sdk\build-tools\19.1.0“中的dx工具将jar转为dex再打包为jar。(有的文章说是platform-tools目录下的dx,是错的)

2.从网络或其他途径获取需要的jar包,并放在制定目录

3.代码中利用DexClassLoader获取动态加载的类的实例注意需要加载的jar包或者apk放在data/data/包名目录和sd卡都可以,不过:newDexClassLoader(dexPath,dexOutputDirs,null,getClassLoader());中的第二参数,dexoutputdirs不能放在"..data/data/包名目录"以外的地方,否则会报错。

4.调用动态加载的类

上面的过程只是最简单的动态加载特定代码,不适用与加载资源和加载完整应用的情形。

三:动态加载资源文件(待续)

主要是反射调用assetmanager的addAssetPath将需要加载的apk中的资源加载进宿主app,然后在加载进的apk中得到资源

更多相关文章

  1. android 资源列表-网址
  2. Android 6.0之后的动态权限
  3. Android插件化开发之DexClassLoader动态加载dex、jar小Demo
  4. [Android] 开发资料收集:动态加载、插件化、热修复技术
  5. IDA动态调试Android的DEX文件
  6. android工程下的文件资源类型
  7. Activity的四种加载模式

随机推荐

  1. 使用 Lightly 在线格式化 HTML
  2. php用户登录,异步提交表单注册
  3. 属性与方法重载和命名空间与类自动加载器
  4. Python公共操作的4个运算符(+、*、in、not
  5. 有序列表、无序列表、定义列表、a标签、
  6. 会话控制 -(一)COOKIE/SESSION
  7. 实例演示数据库的增删改查操作
  8. python 包之 retrying 重复回调教程
  9. 用户注册过程,会话的完整流程
  10. python 包之 retrying 重复回调教程