[关闭]
@act262 2017-04-14T08:34:35.000000Z 字数 1272 阅读 1561

Android中启动JAVA程序多种方式

Android


在Android中启动JAVA程序其实有很多种方式,现总结如下
一、在Android应用程序中发送Intent启动Android应用程序
这个方式最简单,最常用

  1. Intent intent = new Intent()
  2. intent.set...
  3. startActivity(intent);

二、在shell控制台通过am命令发送Intent来启动Android应用程序
在Android的shell控制台通过am命令发送Intent来启动Android应用程序

  1. adb shell am start pkg/xx_activity
  2. adb shell am start -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
  1. am startservice pkg/xx_service

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

四、在shell控制台直接通过运行app_process程序启动一个JAVA程序
在app_process程序中,他会对Android的JNI进行手动注册的,能很好的使用Android的API,因此通过运行app_process程序启动一个JAVA程序,是一个比较完美的方式。app_process程序是一个C程序,它的源码位于frameworks\base\cmds\app_process。

am脚本文件如下:

  1. # Script to start "am" on the device, which has a very rudimentary
  2. # shell.
  3. #
  4. base=/system
  5. export CLASSPATH=$base/framework/am.jar
  6. exec app_process $base/bin com.android.commands.am.Am "$@"

pm脚本文件如下:

  1. # Script to start "pm" on the device, which has a very rudimentary
  2. # shell.
  3. #
  4. base=/system
  5. export CLASSPATH=$base/framework/pm.jar
  6. exec app_process $base/bin com.android.commands.pm.Pm "$@"

CLASSPATH指定了你的程序的位置,com.android.commands.pm.Pm则说明了程序的入口为com.android.commands.pm.Pm,即入口函数main()所在的类,"@"本身又是个shell传入的参数而已
需要注意的是CLASSPATH中的文件必须是dalvik文件格式的,当然CLASSPATH中的文件可以是apk文件,只是你的apk中至少应该有个拥有main()入口函数的类。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注