本人博客原文:http://hubingforever.blog.163.com/blog/static/17104057920126166411775/
在Android中启动JAVA程序其实有很多种方式,现总结如下<wbr style="line-height:25px; font-family:Arial,Helvetica,simsun,u5b8bu4f53; font-size:14px; text-align:left; background-color:rgb(245,245,245)"></wbr>
一、在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。
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()入口函数的类。