zoukankan      html  css  js  c++  java
  • 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中得到资源

     

  • 相关阅读:
    指针的学习
    (转)c & c++内存分配
    C++实现String
    c& c++笔试题
    appium python api收集
    公司python入职培训流程
    app端性能测试笔记
    h5 测试关注点
    robot framework 牛刀一试
    adb 安装apk 报错:Failure [INSTALL_FAILED_INVALID_URI]
  • 原文地址:https://www.cnblogs.com/xns1001/p/5193487.html
Copyright © 2011-2022 走看看