当Java程序运行时,都是一个虚拟机解释java的字节码,将这些字节码翻译成本地CPU的指令吗,然后执行。对Java程序而言,负责解释并执行的就是一个虚拟机。
dalvikvm的作用就是创建一个虚拟机并执行参数中指定的Java类,说明该程序的使用方法:
1.首先新建一个名为Foo.java的文件
class Foo{
public static void main(String[] args){
sysout("hello dalvik");
}
}
2.然后编译文件Foo.java并生成Jar文件
javac Foo.java
$Path=
$dx --dex --output=foo.jar Foo.class
dx工具的作用是将.class转换为.dex文件,因为Dalvik虚拟机所执行的程序不是标准的Jar文件,而是将Jar文件转换以提高执行效率,而转换后的文件就是dex文件。
2.dvz
dvz的作用是从Zygote进程中孵化出一个新的进程,新的进程也是一个Dalvik虚拟机。
1.dvz -classpath 包名称 类名
我们不能再函数Main()内部构造一个Welcome对象的方法达到运行该APK的目的。
3. app_process
Framwork在启动时需要加载并运行如下两个类:
ZygoteInit.java SystemServer.java ,系统提供了一个app_process进程,该进程会自动运行这两个类,app_process的本质就是使用dalvikvm启动ZygoteInit.java。并在启动收加载Framework中的大部分类和资源。
2.接下来app_process中是如何创建虚拟机并执行指定的class文件的。其源代码在文件frameworks/base/cmds/app_main.cpp中,该文件中的关键代码又两处:
1.先创建一个AppRutime对象
2.调用runtime的start()方法指定的class