9.9 Binder系统_Java实现_Android里java程序的编译启动
如果知道了进程号:通过ls /proc/进程号/task 可以看到所有线程 cat /proc/进程号/task/线程号/comm 可以达到线程名字(主线程是main,主线程号就是进程号)
dalvikvm //android上运行的虚拟机,其接受的是dex格式的文件,所以在android上运行的时候class文件需要转换成dex才能执行
达尔维克
CLASSPATH=...
app_process [java-options] cmd-dir start-class-name [options]
Java源码: 01th_hello
javac Hello.java //编译得到Hello.class
dx --dex --output=Hello.jar Hello.class
PC:
java Hello //运行java程序的指令
Android:
dalvikvm -cp /mnt/Android_fs/Hello.jar Hello //运行java程序的程序
//或者通过下面两条指令在android环境下运行java程序,首先设置在哪里找这个类
CLASSPATH=/mnt/android_fs/Hello.jar
app_process /mnt/android_fs Hello///mnt/android_fs是设置的父目录,指定Java程序从哪里找需要的文件
Java源码: 11th_package/01
javac -d . Pack.java
dx --dex --output=pack.jar ./
PC:
java a.b.c.d.Pack
Android:
dalvikvm -cp /mnt/android_fs/pack.jar a.b.c.d.Pack
或者
CLASSPATH=/mnt/android_fs/pack.jar
app_process /mnt/android_fs a.b.c.d.Pack
Java源码: 11th_package/02
javac -d . lisi/Math.java
javac -d . zhangsan/Math.java
javac -d . zhangsan/Print.java
javac Pack.java
dx --dex --output=pack.jar ./
PC:
java Pack
Android:
dalvikvm -cp /mnt/android_fs/pack.jar Pack
CLASSPATH=/mnt/android_fs/pack.jar
app_process /mnt/android_fs Pack
把代码放到android源码中编译:
添加Androd.mk,内容类似: // 参考frameworks/base/cmds/am/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)
启动方式的差别:
dalvikvm
app_process :会多创建2个binder线程: Binder_1, Binder_2
app_process 对应的应用程序是app_main.cpp