天天看點

05.Binder系統:第8課第1節_Binder系統_JAVA實作_Android裡java程式的編譯啟動

這是我們講解binder系統的最後一個課時,會講解binder系統java的實作,在講解之前,我們先講解一個基礎知識。怎麼在android系統中運作我們的java程式,因為後面我們會編寫一些沒有GUI的java程式,我們看看怎麼運作他。

下面是一簡單的java程式:

public class Hello {
	public static void main(String args[]) {
		System.out.println("Hello, world!");
	}
}
           

在ubuntu中執行

javac Hello.java

然後生成一個Hello.class

然後執行

java Hello

這個程式就可以運作了。

在android系統中,他接收的是dex格式的檔案,是以Hello.java編譯成Hello.class之後,還要進行轉換。首先運作編譯指令(這樣我們才能使用dx指令):

source build/envsetup.sh

lunch qytech_azalea-userdebug

然後使用

javac -source 1.7 -target 1.7 Hello.java(網上查找的方法)

在執行

dx --dex --output=Hello.jar Hello.class

可以看到生成了Hello.jar檔案。

然後通過adb下載下傳到開發闆,執行這個應用程式有兩種方法:

dalvikvm64 -cp Hello.jar Hello

dalvikvm32 -cp Hello.jar Hello

或者

CLASSPATH=./Hello.jar app_process ./ Hello

我們都能看到列印資訊。

我們也可以借用android系統,然後讓系統幫助我們編譯。

參考frameworks/base/cmds/am下的Android.mk編寫Android.mk:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_MODULE := pack
include $(BUILD_JAVA_LIBRARY)
           

然後和Hello.java放到用一個檔案夾,把該檔案夾拷貝到frameworks/testing下執行mmm指令,等待編譯完成可以看到:

out/target/product/qytech_azalea/system/framework/pack.jar

可以把該檔案,下載下傳開發闆上運作。

其上dalvikvm與app_process運作程式的差别在于,app_process會建立兩個binder線程。app_process其在android系統對應的源碼,後續過程會為大家講解。

繼續閱讀