• Android动态加载学习


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

    一:原理

    一听动态加载肯定就和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_sdkuild-tools19.1.0“中的dx工具将jar转为dex再打包为jar。(有的文章说是platform-tools目录下的dx,是错的)

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

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

    4.调用动态加载的类

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

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

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

     

  • 相关阅读:
    按不同国家语言进行字符串排序
    ASP.net的客户端脚本
    MSN photo upload tool
    Cool SMIL
    asp.net 2.0 中无刷新机制
    EF Code First 学习笔记:约定配置
    EF Code First学习笔记 初识Code First
    Silverlight、XAML实现滚动文字
    使用Nlog记录日志到数据库
    WCF:如何将net.tcp协议寄宿到IIS
  • 原文地址:https://www.cnblogs.com/xns1001/p/5193487.html
Copyright © 2020-2023  润新知