zoukankan      html  css  js  c++  java
  • [转]Android Dalvikvm的学习笔记

    https://www.cnblogs.com/yangdd/p/12764841.html

    阅读目录

    回到顶部

    什么是dvm

    • 全称 Dalvik virtual machine ,是安卓虚拟机的缩写。Dalvik是Google公司自己设计用于Android平台的Java虚拟机。
    • 每一个 Dalvik 应用作为一个独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
    • 不同于其他堆栈结构的Java虚拟机,dalvik采用的是基于寄存器的架构。
    • DVM可以支持已转为.dex格式的Java应用程序的运行,其中“.dex”格式是专为DVM设计的一种压缩格式,适合内存和处理器速度都有限的系统。
    • DVM编译过程java->class->dex

    回到顶部

    Dalvik字节码

    • Android平台不用JVM来执行代码,而是把应用编译成Dalvik字节码,使用Dalvik虚拟机来执行。最终应用只包含Dalvik字节码。

    • Dalvik虚拟机与Java虚拟机的最显著区别是它们分别具有不同的类文件格式以及指令集。Dalvik虚拟机使用的是dex(Dalvik Executable)格式的类文件,而Java虚拟机使用的是class格式的类文件。

    • Dalvik虚拟机使用的指令是基于寄存器的,而Java虚拟机使用的指令集是基于堆栈的。

    回到顶部

    Android Dalvikvm的简单使用

    • 打开Android模拟器Genymotion中的一台虚拟机,在命令行中使用 adb devices 指令查看该设备是否连接。

    • device 这个状态表示设备或者模拟器已经连接到adb服务器上
    • 使用 adb shell 命令远程登录该设备的linux系统

    • 可以看到dalvikvm是Android系统自带的一个bin文件,它的作用就是创建一个虚拟机并执行参数中指定的Java类。
    • 命令格式是:
    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:AndroidSdkuild-tools29.0.3

    • 配置之后可以正常生成 test.jar

    • /data/app目录是每个应用程序安装后都会在这个目录下创建一个apk副本,apk运行的时候读取的一些应用内资源文件就是从这个apk文件里面获取的,对于本次实践不一定要放在/data/app下,其他path下也可以。

    • 总结一下dalvikvm的作用就是创建一个虚拟机并执行指定参数中的java类

  • 相关阅读:
    JasperReports项目中的应用
    请问两个div之间的上下距离怎么设置
    Spring MVC Flash Attribute 的讲解与使用示例
    8.ireport 取消自动分页,detail不分页
    python网络爬虫学习笔记
    ShareSDK for Android 2.3.8它已发表
    OllyDbg 使用注意事项 (十)
    ListView的cacheColorHint与listSelector物业和fragment里面onActivityResult问题没有响应
    Hdu 3341 Lost's revenge (ac+自己主动机dp+hash)
    PhoneGap 开发与应用 上传 App Store 在
  • 原文地址:https://www.cnblogs.com/beansoft/p/15495826.html
Copyright © 2011-2022 走看看