赞
踩
Dalvik 虚拟机和标准的java虚拟机加载机制的区别:
Dalvik虚拟机如同其他Java虚拟机一样,在运行程序时首先需要将对应的类加载到内存中。而在Java标准的虚拟机中,类加载可以从class文件中读取,也可以是其他形式的二进制流,因此,我们常常利用这一点,在程序运行时手动加载Class,从而达到代码动态加载执行的目的,但是Dalvik虚拟机毕竟不算是标准的Java虚拟机。如下图。
DexClassLoader:可以加载jar/apk/dex,可以从SDK中加载未加载的apk、
PathClassLOader:要传入系统中Apk的存放Path,所以只能加载已经安装的apk文件。
与jvm不同的是Dalvik不能直接加载.dex文件,而是要通过从ClassLoader派生出的两个类 DexClassLoader和PathClassLoader来加载.dex文件。
接下来我们实现两个步骤的准备工作。
一、打包出一个需要用到的jar文件
二、将jar文件转换成dex文件。
Android studio打包jar文件
新建一个项目创建完成后项目目录如下:
在目录com.loaderdome包下面创建一个dynamic包用来放一个接口 Dynamic 在接口里面写一个sayHello()方法,返回Srtring
新建一个impl包,并实现Dynamic接口(这个文件我们会打包成Dex文件来通过接口调用)
点击Build -->Rebuild project,点击完成后需要打包成jar 的class文件会在下面所示的目录中显示,箭头指出的就是我们需要打包的class文件
配置app moudle的 build.gradle 文件添加以下配置代码(这里注意添加在 app moudle 下面的 gradle里面而project下面的gradle)//删除dynamic.jar包任务
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。