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
以下では、javaプログラムをAndroidで実行するための2つの方法を提供します。
1.1方法一
1.1.1コンパイル:
1.1.2実行:
Androidのソースコードプロジェクトに入れて実行可能ファイルにコンパイルします。ここではframe ewarks/base/cmds/am/Android d.mkを参照してください。
1.2.1 Android.mkとtestファイルを追加する
test
out/target/product/mobile/system/frame ebook/hello.jar
out/target/product/mobile/system/bin/javatest
1.2.3実行
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!