用 dalvikvm 执行一个运行于命令行的 Hello World

Windows 操作系统也有五花八门的应用 ,可是想当年学习编程语言的第一个程序,却是在 Turbo C  蓝漆漆的界面里笨拙地敲一个 Hello World 程序 ,然后又在黑漆漆的命令行里打印出的一行输出结果 ,“Hello World”。

Android 上也能实现类似的效果 ,可以使用 dalvikvm 执行一个运行于命令行的 Hello World 。

简要的过程如下:
写代码 Hello.java
编译成 Android Dalvik Virtual Machine 的可执行文件 Hello.dex
使用 ADB 运行测试
内容主要参考 Android 4.4 源码里 dalvik / docs / hello-world.html 文件 。

1. 本文的测试环境
Ubuntu 12.04 64-bit
JDK 1.6
安装 Android SDK,并安装 Android SDK build_tools , 最新版是 19.0.1
具有 Root 权限的 ADB shell

2. 创建 java 源文件 ,内容如下

代码:
public class Hello
{
  public static void main(String[] argc)
  {
    System.out.println("Hello, Android!\n");
  }
}

3.编译
(1)编译成 java class 文件
执行命令 : javac Hello.java
编译完成后 ,目录下生成 Hello.class 文件 。可以使用命令 java Hello 来测试下 ,会输出代码中的 “ Hello, Android!” 的字符串 。
(2) 编译成 dex 文件
编译工具在 Android SDK 的路径如下 ,其中 19.0.1 是Android SDK build_tools  的版本 ,请按照在本地安装的  build_tools 版本来 。建议该路径加载到 PATH 路径下 ,否则引用 dx 工具时需要使用绝对路径 。
./build-tools/19.0.1/dx
执行命令 : dx –dex –output=Hello.dex Hello.class
编译正常会生成 Hello.dex 文件 。

4. 使用 ADB 运行测试
测试命令和输出结果如下 :
$ adb root
$ adb push Hello.dex  /sdcard/
$ adb shell
root@maguro:/ # dalvikvm -cp /sdcard/Hello.dex Hello
Hello, Android!

说明 :
(1)测试环境使用真机和 Android 虚拟机都可以的 。核心的命令是
dalvikvm -cp /sdcard/Hello.dex Hello
-cp 是 class path 的缩写 ,后面的 Hello 是要运行的 Class 的名称 。网上有描述说输入 dalvikvm  –help 可以看到  dalvikvm 的帮助文档 ,但是在 Android4.4 的官方模拟器和自己的手机上测试都提示找不到 Class 路径 ,在Android 老的版本 ( 4.3 ) 上测试还是有输出的 。
(2)因为命令在执行时 , dalvikvm 会在 /data/dalvik-cache/  目录下创建 .dex 文件 ,因此要求 ADB 的执行 Shell 对目录 /data/dalvik-cache/  有读、写和执行的权限 ,否则无法达到预期效果 。

原链接: http://bbs.pediy.com/showthread.php?t=184592

发表评论

电子邮件地址不会被公开。 必填项已用*标注