在Android中启动执行java程序

原文链接: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 Hello
hello 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
$ ls
Hello.class  Hello.jar  Hello.java

注意 dx命令需要android工程 . build 和 lunch 配置环境变量后才能找到此命令,能够执行。

1.1.2 执行:

C:\Users\lisongze>adb push Z:\Android\frameworks\testing\javatest\Hello.jar /data
C:\Users\lisongze> adb shell
root@8860cp0:/ # dalvikvm -cp /data/Hello.jar Hello
dalvikvm -cp /data/Hello.jar Hello
hello java!
或者:
root@8860cp0:/ #  CLASSPATH=/data/Hello.jar app_process . Hello
 CLASSPATH=/data/Hello.jar app_process . Hello
hello 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=/system
export CLASSPATH=$base/framework/hello.jar
exec 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 := hello
include $(BUILD_JAVA_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := javatest
LOCAL_SRC_FILES := test
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_TAGS := optional
include $(BUILD_PREBUILT)

1.2.2 编译

lisongze@svr04:~/Andriod/frameworks/testing/javatest$ ls
Android.mk  Hello.java  test
lisongze@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/framework
adb push javatest /system/bin/

adb shell
root@8860cp0:/ # javatest
javatest
hello java!
或者:
root@8860cp0:/ #  CLASSPATH=/system/framework/hello.jar app_process . Hello
 CLASSPATH=/system/framework/hello.jar app_process . Hello
hello java!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值