这是我们讲解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系统对应的源码,后续过程会为大家讲解。