当Java程序运行时,都是由一个虚拟机来解释Java的字节码,它将这些字节码翻译成本地CPU的指令码,然后执行。对Java程序而言,负责解释并执行的就是一个虚拟机,而对于Linux而言,这个进程只是一个普通的进程,它与一个只有一行代码的Hello World可执行程序无本质区别。所以启动一个虚拟机的方法就跟启动任何一个可执行程序的方法是相同的,那就是在命令行下输入可执行程序的名称,并在参数中指定要执行的Java类。
dalvikvm的作用就是创建一个虚拟机并执行参数中指定的Java类,下面以一个例子来说明该程序的使用方法。
首先新建一个Foo.java文件,如以下代码所示:
- class Foo {
- public static void main(String[] args) {
- System.out.println("Hello dalvik");
- }
- }
然后编译该文件,并生成Jar文件,如以下代码所示:
- $ javac Foo.java
- $ PATH=/Users/keyd/android/out/host/darwin-x86/bin:$PATH
- $ 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到设备中,并执行,如以下代码所示:
- $ adb push foo.jar /data/app
- $ adb shell dalvikvm -cp /data/app/foo.jar Foo
- Hello dalvik
- 以上命令首
以上命令首先将该Jar包push到/data/app目录下,因为该目录一般用于存放应用程序,接着使用adb shell执行dalvikvm程序。dalvikvm的执行语法如下:
- dalvikvm -cp 类路径 类名
从这里也可以感觉到,dalvikvm的作用就像在PC上执行Java程序一样。
相关推荐
Android Dalvikvmdalvikvm:用来后台创建一个虚拟机运行指定的java类即使应用程序被关闭...执行export ANDROID_DATA=/data/data/包名/ 修改环境变量,紧接着执行dalvikvm命令。代码中执行时一定要用逗号隔开,同一句执
一个用于编译或运行代码生成的实用程序,其目标是Android的Dalvik VM
AndroidDalvikVMOverview_v1.0.0_201506031920.pdf
An Introduction to the Android Framework, a core architecture view from apps to the kernel
和谐2
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
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 (解决
兼容ART和DalvikVM虚拟机,4.0-7.0,不会出现类似hotfix方案在art下虚拟机quick引用指针错乱造成的崩溃情况 补丁包动态生成,使用方式和RocooFix 一致,但某些功能待完善 Known issue 补丁打包速度待优化 有些未...
Android内存泄漏说明文件 英文 08-06 13:53:42.082: D/dalvikvm(12152): GC_CONCURRENT freed 1842K, 12% free 15412K/17399K, paused 1ms+3ms
但是如果程序在一次操作中打开几个M的文件,那么通常会出现下面的错误信息。 02-04 21:46:08.703: ERROR/dalvikvm-heap(2429): 1920000-byte external allocation too large for this process
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
本书分为“算法篇”和“实现篇”两大部分。算法篇介绍了标记-清除算法、引用计数法、复制算法、...实现篇介绍了垃圾回收在Python、DalvikVM、Rubinius、V8等几种语言处理程序中的具体实现。本书适合各领域程序员阅读
通过允许您与 DalvikVM、其他应用程序的 IPC 端点和底层操作系统进行交互 Drozer 提供了一些工具来帮助您使用和共享 Android 的公共攻击。对于远程攻击,它可以生成外壳代码,以帮助您将 Drozer 代理部署为远程管理...
程序可以采用 JAVA 开发,但是因为它的虚拟机 (Virtual Machine) Dalvik ,是将 JAVA 的 bytecode 转成 自 己的格式,回避掉需要付给 SUN 有关 JAVA 的授权费用。 对手机制造者的影响 � Android 是款开源的移动计算...
对于Android开发者来说虽然使用了可以自动管理内存的Java语言,但是对于内存管理不当,可能你的应用不断出现类似INFO/dalvikvm-heap(10798): Grow heap (frag case) to 6.437MB for 1114126-byte allocation,而出现...
使用DalvikVM在运行Android 4.4.4且允许SELinux设置为允许的Nexus 5上进行构建和测试。 目前,URLSniffer尚未经过ART的测试。 用法 它是一类,少于100行代码。 阅读它,或者不用担心。 修订记录 v1.0(初始发行版)...
其中W/I/D表示log的级别,“dalvikvm”“ARMAssembler”等是不同组件(component)的名称,后面括号里面的数字表示了发出log的进程号。 使用技巧: 1.使用logcat &在后台运行 2.使用-d得到所有log 3.使用-f或者...
环境没有Android运行时组件,因此某些功能将不可用(DalvikVM,OpenSLES等)。 如何使用 确保已安装并正在运行Docker。 git clone https://github.com/termux/termux-docker && cd ./termux-docker ./run.sh或./...
代码如下: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 ...
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 ...