`
1025250620
  • 浏览: 225937 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

dalvikvm 命令调试(转)

 
阅读更多

当Java程序运行时,都是由一个虚拟机来解释Java的字节码,它将这些字节码翻译成本地CPU的指令码,然后执行。对Java程序而言,负责解释并执行的就是一个虚拟机,而对于Linux而言,这个进程只是一个普通的进程,它与一个只有一行代码的Hello World可执行程序无本质区别。所以启动一个虚拟机的方法就跟启动任何一个可执行程序的方法是相同的,那就是在命令行下输入可执行程序的名称,并在参数中指定要执行的Java类。

dalvikvm的作用就是创建一个虚拟机并执行参数中指定的Java类,下面以一个例子来说明该程序的使用方法。

首先新建一个Foo.java文件,如以下代码所示:

  1. class Foo {   
  2.     public static void main(String[] args) {   
  3.         System.out.println("Hello dalvik");  
  4.     }  
  5. }  

然后编译该文件,并生成Jar文件,如以下代码所示:

  1. $ javac Foo.java  
  2. PATH=/Users/keyd/android/out/host/darwin-x86/bin:$PATH  
  3. $ dx --dex --output=foo.jar Foo.class  

dx工具的作用是将.class转换为dex文件,因为Dalvik虚拟机所执行的程序不是标准的Jar文件,而是将Jar文件经过特别的转换以提高执行效率,而转换后的文件就是dex文件。dx工具是Android源码的一部分,其路径是在out目录下,因此在执行dx之前,需要添加该路径。

dx执行时,--output参数用于指定Jar文件的输出路径,注意该Jar文件内部包含已经不是纯粹的.class文件,而是dex格式文件,Jar仅仅是zip包。

生成了该Jar包后,就可以把该Jar包push到设备中,并执行,如以下代码所示:

  1. $ adb push foo.jar /data/app  
  2. $ adb shell dalvikvm -cp /data/app/foo.jar Foo  
  3. Hello dalvik  
  4. 以上命令首 

以上命令首先将该Jar包push到/data/app目录下,因为该目录一般用于存放应用程序,接着使用adb shell执行dalvikvm程序。dalvikvm的执行语法如下:

 

  1. dalvikvm -cp 类路径 类名 

从这里也可以感觉到,dalvikvm的作用就像在PC上执行Java程序一样。

分享到:
评论

相关推荐

    Dalvikvm_pro:安卓 Dalvikvm

    Android Dalvikvmdalvikvm:用来后台创建一个虚拟机运行指定的java类即使应用程序被关闭...执行export ANDROID_DATA=/data/data/包名/ 修改环境变量,紧接着执行dalvikvm命令。代码中执行时一定要用逗号隔开,同一句执

    Android-一个用于编译或运行代码生成的实用程序其目标是Android的DalvikVM

    一个用于编译或运行代码生成的实用程序,其目标是Android的Dalvik VM

    AndroidDalvikVMOverview

    AndroidDalvikVMOverview_v1.0.0_201506031920.pdf

    An Introduction to the Android Framework

    An Introduction to the Android Framework, a core architecture view from apps to the kernel

    harmonyos2-dalvik:DalvikVM-原始回购:https://android.googlesource.com/platfo

    和谐2

    Android代码-DexHook

    Build and tested on Nexus 5 running Android 4.4.4 with SELinux set permissive, using DalvikVM. At this time, DexHook is untested with ART. Usage Its one class, less than 100 lines of code. Rea

    Android代码-一套新的热修复方案

    RocooFix Another hotfix framework update 新写了一个框架原理与美团robust框架...支持DalvikVM和ART VM 制作补丁更加方便 支持com.android.tools.build:gradle:1.3.0->com.android.tools.build:gradle:2.1.2 (解决

    Android代码-基于 InstantRun 实现的一个 Android 热修复方案

    兼容ART和DalvikVM虚拟机,4.0-7.0,不会出现类似hotfix方案在art下虚拟机quick引用指针错乱造成的崩溃情况 补丁包动态生成,使用方式和RocooFix 一致,但某些功能待完善 Known issue 补丁打包速度待优化 有些未...

    Android内存泄漏信息介绍(英文)

    Android内存泄漏说明文件 英文 08-06 13:53:42.082: D/dalvikvm(12152): GC_CONCURRENT freed 1842K, 12% free 15412K/17399K, paused 1ms+3ms

    Android 内存溢出问题

    但是如果程序在一次操作中打开几个M的文件,那么通常会出现下面的错误信息。 02-04 21:46:08.703: ERROR/dalvikvm-heap(2429): 1920000-byte external allocation too large for this process

    android的虚拟机dalvik源码-09年7月

    android的虚拟机dalvik源码: run-core-tests.sh Android.mk NOTICE MODULE_LICENSE_APACHE2 README.txt /libdex /libcore-disabled /dexopt /libcore /tools /tests .../dalvikvm /docs /dvz /vm /dx

    垃圾回收算法与实现——高清非扫描.pdf

    本书分为“算法篇”和“实现篇”两大部分。算法篇介绍了标记-清除算法、引用计数法、复制算法、...实现篇介绍了垃圾回收在Python、DalvikVM、Rubinius、V8等几种语言处理程序中的具体实现。本书适合各领域程序员阅读

    Drozer 使用指南英文版.rar

    通过允许您与 DalvikVM、其他应用程序的 IPC 端点和底层操作系统进行交互 Drozer 提供了一些工具来帮助您使用和共享 Android 的公共攻击。对于远程攻击,它可以生成外壳代码,以帮助您将 Drozer 代理部署为远程管理...

    新版Android开发教程.rar

    程序可以采用 JAVA 开发,但是因为它的虚拟机 (Virtual Machine) Dalvik ,是将 JAVA 的 bytecode 转成 自 己的格式,回避掉需要付给 SUN 有关 JAVA 的授权费用。 对手机制造者的影响 � Android 是款开源的移动计算...

    Grow heap (frag case) 堆内存过大的深入解析

    对于Android开发者来说虽然使用了可以自动管理内存的Java语言,但是对于内存管理不当,可能你的应用不断出现类似INFO/dalvikvm-heap(10798): Grow heap (frag case) to 6.437MB for 1114126-byte allocation,而出现...

    URLSniffer:简单的xposed模块,可从java.net.URL嗅探URL

    使用DalvikVM在运行Android 4.4.4且允许SELinux设置为允许的Nexus 5上进行构建和测试。 目前,URLSniffer尚未经过ART的测试。 用法 它是一类,少于100行代码。 阅读它,或者不用担心。 修订记录 v1.0(初始发行版)...

    android logcat使用

    其中W/I/D表示log的级别,“dalvikvm”“ARMAssembler”等是不同组件(component)的名称,后面括号里面的数字表示了发出log的进程号。 使用技巧: 1.使用logcat &在后台运行 2.使用-d得到所有log 3.使用-f或者...

    termux-docker:Termux环境打包为Docker映像

    环境没有Android运行时组件,因此某些功能将不可用(DalvikVM,OpenSLES等)。 如何使用 确保已安装并正在运行Docker。 git clone https://github.com/termux/termux-docker && cd ./termux-docker ./run.sh或./...

    解析android res 运行错误的问题

    代码如下:W/ResourceType( 756): Failure getting entry for 0x7f020004 (t=1 e=4) in package 0: 0xffffffb1D/AndroidRuntime( 756): Shutting down VMW/dalvikvm( 756): threadid=1: thread exiting with ...

    Android 如何使用log4j及注意事项

    11-23 09:44:56.947: D/dalvikvm(1585): GC_FOR_MALLOC freed 3278 objects / 311568 bytes in 31ms rejecting opcode 0x21 at 0x000a rejected Lorg/apache/log4j/config/PropertySetter;.getPropertyDescriptor ...

Global site tag (gtag.js) - Google Analytics