在Android中启动执行java程序
16lz
2021-01-25
原文链接:http://www.lisongze.com/2018/07/20/java-in-android-exec/ or http://www.lisongze.cn/2018/07/20/java-in-android-exec/
1. 在Android中启动执行java程序
在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中执行。
1.1 方法一
1.1.1 编译:
$ javac Hello.java$ dx --dex --output=Hello.jar Hello.class$ lsHello.class Hello.jar Hello.java
注意 dx命令需要android工程 . build 和 lunch 配置环境变量后才能找到此命令,能够执行。
1.1.2 执行:
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!
1.2 方法二
放入Android源码工程中编译成可执行文件,这里参考frameworks/base/cmds/am/Android.mk
1.2.1 增加 Android.mk和test文件
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 "$@"
Android.mk
# 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)
1.2.2 编译
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
1.2.3 执行
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!
更多相关文章
- GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!
- 如何在后台运行Linux命令?
- No.11 使用firewall配置的防火墙策略的生效模式
- Android使用WebView实现图片点击的监听
- kotlin在databinding中的应用
- android 保存图片到数据库
- android log的两种方法
- Android——sqlite3 基本命令操作
- Android中ViewFlipper详解