首页
社区
课程
招聘
[旧帖] [原创]使用 dalvikvm 执行一个运行于命令行的 Hello World 0.00雪花
2014-2-16 22:40 3596

[旧帖] [原创]使用 dalvikvm 执行一个运行于命令行的 Hello World 0.00雪花

2014-2-16 22:40
3596
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/  有读、写和执行的权限 ,否则无法达到预期效果 。

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回