中文原文: http://hi.baidu.com/seucrcr/item/ebd1b34879a168086cc2f078英文原文: http://www.netmite.com/android/mydroid/2.0/dalvik/docs/hello-world.html在android设备上,dalvik vm通常都被嵌入到android应用框架里执行,也可以直接运行vm,就像你要在你桌面系统运行虚拟机一样。但是很多Android的JNI无法调用。因为Android的很多JNI其实是需要手动注册的。要想完美的解决该问题,请在shell控制台直接通过运行app_process程序启动一个JAVA程序。关于此的更多内容请参考《 如何在Android中启动JAVA程序 在编译完java源码后,转换并整合.class文件到.dex文件然后将它push到设备。这儿是个简单的例子:

% echo 'class Foo {' \ > 'public static void main(String[] args) {' \ > 'System.out.println("Hello, world"); }}' > Foo . java % javac Foo . java % dx -- dex -- output = foo . jar Foo . class % adb push foo . jar / sdcard % adb shell dalvikvm - cp / sdcard / foo . jar Foo Hello , world

-cp选项设置了路径。adb shel的初始路径可能并不是你要的,最好指定绝对路径。 dx命令接收了每个class的文件、目录或者jar结构列表,当--output文件名以.jar、.zip或者.apk结尾时,一个叫做classes.dex的文件就被创建并保存。 运行adb shell davlikvm -help可获得更多命令行选项。1、使用调试器 你可以通过服从jdwp的调试器来调试独立的应用,有两种基本方法。 一种是通过TCP,一种是通过DDMS。(CR:唔,前面看过了)2、桌面编译 dalvik vm也可以直接在桌面使用,事实上这更复杂,因为你没有建立环境的一些东西,本地库代码被用于支持核心dalvik库。 首先:. build/envsetup.shlunch sim-eng 你可以看到

============================================ TARGET_PRODUCT = sim TARGET_BUILD_VARIANT = eng TARGET_SIMULATOR = true TARGET_BUILD_TYPE = debug TARGET_ARCH = x86 HOST_ARCH = x86 HOST_OS = linux HOST_BUILD_TYPE = release BUILD_ID = ============================================

这引导你为桌面vm进行编译,编译是基于glibc的。该模式仅仅为实验用,或许将来会更有用。 你可能看到TARGET_BUILD_TYPE=debug或者 = release或者什么都没有,你只要改变lunch命令的参数就可以。 其次,编译:make 当完成后,在桌面运行dalvik:

% dalvikvm E / dalvikvm ( 19521 ): ERROR : must specify non - '.' bootclasspath W / dalvikvm ( 19521 ): JNI_CreateJavaVM failed Dalvik VM init failed ( check log file )

为了运行,你必须指定指定引导程序的路径,指定放解压jar文件后dex数据的空间。可以这样做:

#!/bin/sh # base directory, at top of source tree; replace with absolute path base=`pwd` # configure root dir of interesting stuff root=$base/out/debug/host/linux-x86/product/sim/system export ANDROID_ROOT=$root # configure bootclasspath bootpath=$root/framework export BOOTCLASSPATH=$bootpath/core.jar:$bootpath/ext.jar:$bootpath/framework.jar:$bootpath/android.policy.jar:$bootpath/services.jar # this is where we create the dalvik-cache directory; make sure it exists export ANDROID_DATA=/tmp/dalvik_$USER mkdir -p $ANDROID_DATA/dalvik-cache exec dalvikvm $@

准备dx的方式和前面一行:

% cat > Foo . java class Foo { public static void main ( String [] args ) { System . out . println ( "Hello, world" ); } } ( ctrl - D ) % javac Foo . java % dx -- dex -- output = foo . jar Foo . class % ./ rund - cp foo . jar Foo Hello , world

你可以获得参数的帮助通过以下的命令:

% ./rund -help

这也可以显示vm可用选项参数。模拟“调试”环境有完整的additional assertion,使能检测功能(导致了vm变慢),但是也因此能测试。 上述所有都是基于x86的,其他的架构还要考虑porting工作,如果libffi支持你的系统,工作量会比较小。

更多相关文章

  1. android应用程序fps meter[帧数显示]的分析 —— 浅谈root的风险
  2. Android应用程序获取系统权限
  3. 让android应用程序获得system权限
  4. 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写
  5. Android使用ADB启动应用程序
  6. 修改Android自带的JAVA应用程序
  7. android studio 程序员有福了—从layout自动生成viewholder类

随机推荐

  1. android 注册、登录实现程序
  2. asdasdas
  3. android 表单布局 左右布局
  4. Android中attr自定义属性详解
  5. Simple Gestures on Android
  6. Android(安卓)读取和保存文件(手机内置存
  7. Android的数据库--sqlite(一)
  8. 2011.07.06(2)——— android apiDemos 之
  9. Android(安卓)获取WIFI MAC地址的方法
  10. 小技巧及总结