Dalvik virtual machine
,是安卓虚拟机的缩写。Dalvik是Google公司自己设计用于Android平台的Java虚拟机。Android平台不用JVM来执行代码,而是把应用编译成Dalvik字节码,使用Dalvik虚拟机来执行。最终应用只包含Dalvik字节码。
Dalvik虚拟机与Java虚拟机的最显著区别是它们分别具有不同的类文件格式以及指令集。Dalvik虚拟机使用的是dex(Dalvik Executable)格式的类文件,而Java虚拟机使用的是class格式的类文件。
Dalvik虚拟机使用的指令是基于寄存器的,而Java虚拟机使用的指令集是基于堆栈的。
adb devices
指令查看该设备是否连接。device
这个状态表示设备或者模拟器已经连接到adb服务器上adb shell
命令远程登录该设备的linux系统dalvikvm -cp 类路径 类名
Dalvikvm.java
public class Dalvikvm {
public static void main(String[] args) {
int a = 3;
int b = 7;
System.out.println(a + " + " + b + "=" + add(a, b));
}
private static int add(int a, int b) {
return a + b;
}
}
.jar
文件,如下命令所示://生成 Dalvikvm.class
javac Dalvikvm.java
//生成 test.jar(使用dx工具将class文件打包压缩成dex文件jar包)
dx --dex --output=test.jar Dalvikvm.class
output
参数用于指定Jar文件的输出路径,输出的Jar包中存储着dex格式文件。
将生成的 test.jar
push
到Android手机的/data/app目录下,并且用 dalvikvm
执行该jar
adb push test.jar /data/app
adb shell
cd /data/app
dalvikvm -cp test.jar Dalvikvm
dx工具位于SDK的build-tools里面,作用是将.class转换为dex文件,因为Dalivk虚拟机所执行的程序不是标准的jar文件,而是将jar文件通过特别转换以提高执行效率,而转换后的文件就是dex文件。
这里的问题是没有在PATH里配置 E:\Android\Sdk\build-tools\29.0.3
配置之后可以正常生成 test.jar
/data/app目录是每个应用程序安装后都会在这个目录下创建一个apk副本,apk运行的时候读取的一些应用内资源文件就是从这个apk文件里面获取的,对于本次实践不一定要放在/data/app下,其他path下也可以。
总结一下dalvikvm的作用就是创建一个虚拟机并执行指定参数中的java类。
原文:https://www.cnblogs.com/yangdd/p/12764841.html