Androidでjavaプログラムの実行を開始します。

8357 ワード

原文のリンク:http://www.lisongze.com/2018/07/20/java-in-android-exec/ orhttp://www.lisongze.cn/2018/07/20/java-in-android-exec/
1.Androidでjavaプログラムの実行を開始する
pc上のソースコードHello.javaはjavacコンパイルによってハロー.classを生成し、javaコマンドによってjava仮想マシン解析実行を開始する。
ハロー.java
class Hello {
	public static void main(String args[]) {
		System.out.println("hello java!");
	}
}
コンパイル:
$ javac Hello.java
$ java Hello
hello java!
Androidプラットフォーム上の仮想マシンはgoogle社が自分で設計したDalvik vmであり、dexはAndroidプラットフォーム上の実行可能ファイルであるため、ハロー.java—Hello.class-(dx変換)–dexフォーマットが必要です。
以下では、javaプログラムをAndroidで実行するための2つの方法を提供します。
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のソースコードプロジェクトに入れて実行可能ファイルにコンパイルします。ここではframe ewarks/base/cmds/am/Android d.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/frame ebook/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!