本文共 2060 字,大约阅读时间需要 6 分钟。
原文链接: or
在pc上源代码Hello.java通过javac编译生成Hello.class,通过java命令启动java虚拟机解析执行.
Hello.java
class Hello { public static void main(String args[]) { System.out.println("hello java!"); }}
编译:
$ javac Hello.java$ java Hellohello java!
在Android平台上虚拟机是goole公司自己设计的Dalvik vm,dex是Android平台上(Dalvik 虚拟机)的可执行文件,
因此需要 Hello.java —(javac 编译)–>Hello.class —(dx转换)–> dex格式。以下提供两种方法实现java程序在android中执行。
$ javac Hello.java$ dx --dex --output=Hello.jar Hello.class$ lsHello.class Hello.jar Hello.java
注意 dx命令需要android工程 . build 和 lunch 配置环境变量后才能找到此命令,能够执行。
C:\Users\lisongze>adb push Z:\Android\frameworks\testing\javatest\Hello.jar /dataC:\Users\lisongze> adb shellroot@8860cp0:/ # dalvikvm -cp /data/Hello.jar Hellodalvikvm -cp /data/Hello.jar Hellohello java!或者:root@8860cp0:/ # CLASSPATH=/data/Hello.jar app_process . Hello CLASSPATH=/data/Hello.jar app_process . Hellohello java!
放入Android源码工程中编译成可执行文件,这里参考frameworks/base/cmds/am/Android.mk
test
#!/system/bin/sh## Script to start "am" on the device, which has a very rudimentary# shell.#base=/systemexport CLASSPATH=$base/framework/hello.jarexec app_process $base/bin Hello "$@"
# Copyright 2008 The Android Open Source Project#LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_MODULE := helloinclude $(BUILD_JAVA_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE := javatestLOCAL_SRC_FILES := testLOCAL_MODULE_CLASS := EXECUTABLESLOCAL_MODULE_TAGS := optionalinclude $(BUILD_PREBUILT)
lisongze@svr04:~/Andriod/frameworks/testing/javatest$ lsAndroid.mk Hello.java testlisongze@svr04:mm -B
编译生成以下两个文件:
out/target/product/mobile/system/framework/hello.jar
out/target/product/mobile/system/bin/javatest
adb push hello.jar /system/frameworkadb push javatest /system/bin/adb shellroot@8860cp0:/ # javatestjavatesthello java!或者:root@8860cp0:/ # CLASSPATH=/system/framework/hello.jar app_process . Hello CLASSPATH=/system/framework/hello.jar app_process . Hellohello java!
转载地址:http://sglpi.baihongyu.com/