基本Dalvik VM调用

发布时间:2016-12-11 6:25:19 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"基本Dalvik VM调用",主要涉及到基本Dalvik VM调用方面的内容,对于基本Dalvik VM调用感兴趣的同学可以参考一下。

中文原文: 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 FooHello, 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.sh lunch sim-eng     你可以看到 ============================================TARGET_PRODUCT=simTARGET_BUILD_VARIANT=engTARGET_SIMULATOR=trueTARGET_BUILD_TYPE=debugTARGET_ARCH=x86HOST_ARCH=x86HOST_OS=linuxHOST_BUILD_TYPE=releaseBUILD_ID=============================================     这引导你为桌面vm进行编译,编译是基于glibc的。该模式仅仅为实验用,或许将来会更有用。     你可能看到TARGET_BUILD_TYPE=debug或者 = release或者什么都没有,你只要改变lunch命令的参数就可以。     其次,编译: make     当完成后,在桌面运行dalvik: % dalvikvmE/dalvikvm(19521): ERROR: must specify non-'.' bootclasspathW/dalvikvm(19521): JNI_CreateJavaVM failedDalvik VM init failed (check log file)     为了运行,你必须指定指定引导程序的路径,指定放解压jar文件后dex数据的空间。可以这样做: #!/bin/sh# base directory, at top of source tree; replace with absolute pathbase=`pwd`# configure root dir of interesting stuffroot=$base/out/debug/host/linux-x86/product/sim/systemexport ANDROID_ROOT=$root# configure bootclasspathbootpath=$root/frameworkexport 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 existsexport ANDROID_DATA=/tmp/dalvik_$USERmkdir -p $ANDROID_DATA/dalvik-cacheexec dalvikvm $@     准备dx的方式和前面一行: % cat > Foo.javaclass 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 FooHello, world     你可以获得参数的帮助通过以下的命令: % ./rund -help     这也可以显示vm可用选项参数。模拟“调试”环境有完整的additional assertion,使能检测功能(导致了vm变慢),但是也因此能测试。     上述所有都是基于x86的,其他的架构还要考虑porting工作,如果libffi支持你的系统,工作量会比较小。

上一篇:所见即所得:四款免编程移动游戏开发引擎推荐
下一篇:python的round函数使用

相关文章

相关评论