原文链接: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!

更多相关文章

  1. GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!
  2. 如何在后台运行Linux命令?
  3. No.11 使用firewall配置的防火墙策略的生效模式
  4. Android使用WebView实现图片点击的监听
  5. kotlin在databinding中的应用
  6. android 保存图片到数据库
  7. android log的两种方法
  8. Android——sqlite3 基本命令操作
  9. Android中ViewFlipper详解

随机推荐

  1. Android(安卓)ListView异步加载图片
  2. Android(安卓)learning Starting!
  3. Android(安卓)drawRect参数
  4. android关于动态壁纸live WallPaper
  5. android按分辨率压缩图片
  6. android如何退出系统
  7. android 源码下载及问题
  8. Drawable Resources
  9. android contentProvider例子
  10. Windows将来也能跑Android应用: Native x