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程序一样。
如果是java 7,javac 一定要编译成java6 的字节码,不然dx不识别
javac -source 6 -target 6 Foo.java
分享到:
相关推荐
6. **设备上的运行**:当用户下载并安装APK后,Android系统会使用dalvikvm进程加载.dex文件,并执行其中的指令。Android 5.0(Lollipop)后,Dalvik VM被ART(Android RunTime)所取代,但基本的编译和执行流程相似...
核心:dalvikvm –cp dex化jar路径 需要执行的主函数类完整类名 主函数参数主函数多个参数的空格隔开前置说明ANDROID_DATA默认为/data执行dalvikvm后需要生成一个dex文件存放在$ANDROID_DATA/dalvik-cache 目录下...
DalvikVM 是 Android 系统早期采用的虚拟机,负责运行基于 Dex 格式的应用程序。在 HarmonyOS 2 中,DalvikVM 的存在意味着华为在构建其操作系统时,可能沿用了或对 Android 的 Dalvik 进行了优化和改造,以适应自身...
虚拟机是一种通过软件模拟实现的计算机,它包括处理器、堆栈、寄存器等硬件架构的抽象,并具备自己的一套指令系统,即字节码中的各个指令。虚拟机可以模拟出多种计算机的功能,从而在不同的硬件和操作系统上都能够...
Android 应用程序使用 Java 语言编写,但它们的字节码格式不同, DalvikVM 和 JVM 也都是独立的虚拟机。开发者需要了解它们之间的差异,才能更好地开发 Android 应用程序。 在 Android 开发中,了解 Java 编程语言...
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
- **DalvikVM**:一种专为Android设计的虚拟机,负责执行应用程序的.dex文件。 - **特点**:基于寄存器架构,提高了执行效率,减少了内存占用。 - **区别**:与传统的Java虚拟机(JVM)相比,DVM采用了不同的编译和...
要编译并运行这个Java程序,首先需要将其编译为`.dex`文件(Dalvik可执行格式),然后通过`dalvikvm`命令启动: ```bash javac Foo.java dx --dex --output=Foo.dex Foo.class dalvikvm -cp Foo.dex Foo ``` 上述...
- `dalvikvm -classpath {{path/to/file.jar}} {{classname}}` 可以启动指定类名的Java程序。 `dumpsys`命令提供有关Android系统服务的诊断信息,只能通过`adb shell`使用。它能够获取所有系统服务的详细状态,这...
- 例如:“I/dalvikvm: threadid=3: reacting to signal 3”和“I/dalvikvm: Wrote stack trace to '/data/anr/traces.txt'”。 #### 5. 类引用异常 - 在调试过程中,可能会遇到类引用找不到的情况,例如:“W/...
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 补丁打包速度待优化 有些未...
- **D/dalvikvm(3652):DexOpt:load273ms,verify+opt1841ms,3289956bytes** - **知识点**:此条日志记录了Dalvik虚拟机执行DexOpt操作的时间和内存消耗情况。 - **load273ms**:加载.dex文件所需时间。 - **verify...
首先,`platform/system/core`是Android源码树中的一个关键部分,它包含了系统的基础服务和核心库,如Java层的dalvikvm(现在已被art替代)、libcore、sqlite等。在OpenWRT环境中编译这部分代码,需要确保具备正确的...
要实现这一点,你可能需要借助Android的命令行工具,如`dx`或`dalvikvm`(对于旧版本的Android)来编译和运行Java类。`dx`工具用于将`.class`文件转换为Dalvik字节码(`.dex`文件),这是Android设备可以理解的格式...
1. **查看关键Log条目**:找出与ANR相关的Log条目,通常是`Binder_XX`、`ActivityManager`或`dalvikvm`打印的错误信息。 2. **定位问题代码**:根据Log中的堆栈跟踪信息,找到引起阻塞的代码行。 3. **分析原因**:...
E/dalvikvm-heap(12517): 1048576-byte external allocation too large for this process. E/GraphicsJNI(12517): VM won't let us allocate 1048576 bytes D/AndroidRuntime(12517): Shutting down VM W/dalvikvm...
- `dalvikvm -cp /sdcard/Hello.dex Hello` 是核心命令,其中`-cp`表示classpath,而`Hello`是需要执行的类名。 - 达到预期效果的前提是ADB的shell需要对`/data/dalvik-cache/`目录有读写执行权限。 - 执行过程中,`...
例如,错误信息"02-04 21:46:08.703: ERROR/dalvikvm-heap(2429): 1920000-byte external allocation too large for this process"表明系统尝试分配1.92MB的外部内存,但超过了进程的限制。这可能是因为一次性加载了...
- Logcat日志:查找“dalvikvm-heap”或“Low Memory Killer”相关的错误信息。 - ANR(Application Not Responding):长时间执行主线程任务,导致系统认为应用无响应,也会显示OOM。 **4. 解决策略** - 对象复用...