这里不介绍Android启动过程中,app_process从哪个进程fork处理,也不介绍app_process启动App的过程。仅介绍app_process启动纯Java程序的相关知识。
一、HelloWorld示例
编写一个hellworld 的Java程序,并且编译成.class文件,简单得没啥可说的。public class Helloworld {
public static void main(String[]args){
System.out.println("Hello, I am started by app_process!");
}
}
Android对Java虚拟机做了修改,即使用自己的dalvik虚拟机(后来的ART)。因此,.class的字节码在Dalvik虚拟机上是不能运行的。Android Platform tool为我们提供了生成Android上可执行jar(Dex)工具:dx(dx路径参考:Sdk\build-tools\25.0.0\dx.bat)。编译命令如下,当然如果不想用命令行也可以用Android Studio创建编译也行,编译dex路径:app\build\intermediates\transforms\dexBuilder\debug//编译,这里主要是Platform tool上用的是Java 7,所以显式指定1.7
javac -source 1.7 -target 1.7 D:\app_process\\Helloworld.java
//生成dex,当然生成jar在Android上也是可执行的
dx --dex --output=D:\app_process\Helloworld.dex Helloworld.class
2. 将我们前面编译得到的dex(jar)文件push到/data/local/tmp文件夹下adb push D:\app_process\Helloworld.dex /data/local/tmp
adb shell
构建app_process运行参数:app_process -Djava.class.path=/data/local/tmp/Helloworld.dex /data/local/tmp Helloworld
这里有个问题,用老的三星NODE 3测试总是提示Aborted,中断失败!华为畅玩9没问题。