在Android中启动JAVA程序其实有很多种方式,现总结如下

一、在Android应用程序中发送Intent启动Android应用程序
这个方式最简单,最常用。在此不在累述。关于Intent的更多内容请阅读《Intent技术简介》

二、在shell控制台通过am命令发送Intent来启动Android应用程序
在Android的shell控制台通过am命令发送Intent来启动Android应用程序
关于此的详细内容请参考《Android命令am详解》

三、在shell控制台直接通过davlikvm命令启动一个JAVA程序。
该方式有个天生的缺点,即在其中,很多Android的JNI无法调用。因为Android的很多JNI其实是需要手动注册的。
关于请参考《基本Dalvik VM调用》

四、在shell控制台直接通过运行app_process程序启动一个JAVA程序
在app_process程序中,他会对Android的JNI进行手动注册的,能很好的使用Android的API,因此通过运行app_process程序启动一个JAVA程序,是一个比较完美的方式。app_process程序是一个C程序,它的源码位于frameworks\base\cmds\app_process。
关于它的使用请参考《Android命令am详解》以及shell脚本frameworks\base\cmds\am\am和frameworks\base\cmds\pm\pm
am脚本文件如下: # Script to start "am" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/am.jar
exec app_process $base/bin com.android.commands.am.Am "$@"
pm脚本文件如下:
# Script to start "pm" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/pm.jar
exec app_process $base/bin com.android.commands.pm.Pm "$@"
CLASSPATH指定了你的程序的位置,com.android.commands.pm.Pm则说明了程序的入口为com.android.commands.pm.Pm,即入口函数main()所在的类,"$@"就是传递给main()函数的参数,只是这里"$@"本身又是个shell传入的参数而已
需要注意的是CLASSPATH中的文件必须是dalvik文件格式的,关于此的转换请参考《基本Dalvik VM调用》当然CLASSPATH中的文件可以是apk文件,只是你的apk中至少应该有个拥有main()入口函数的类

更多相关文章

  1. Linux内核怎样启动Android
  2. [Android] 基于 Linux 命令行构建 Android(安卓)应用(一):关于 Andr
  3. Android深入四大组件(一)应用程序启动过程
  4. Android(安卓)ContentProvider 多进程multiprocess 详解
  5. Android中Activity启动模式详解
  6. Android重量级开发之--提高android启动速度研究
  7. Android(安卓)ContentProvider 多进程multiprocess 详解
  8. Android的ps命令介绍和技巧
  9. Android(安卓)SDK 证书没接受问题

随机推荐

  1. Android中Message传递参数实例
  2. Android(安卓)Studio中修改gradle插件版
  3. android获取短信中心号
  4. [zip]android下实现直接读取zip中的文件
  5. 通话接通和断开时振动
  6. JS 解决安卓手机输入框被软键盘遮住的问
  7. Android中Context详解——你所不知道的Co
  8. S5PV310 Android(安卓)电容屏驱动调试
  9. 【android】各镜像文件img介绍
  10. ReactNative学习----20ReactNative中调用