如何在Android中启动JAVA程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Android中启动JAVA程序相关的知识,希望对你有一定的参考价值。

  在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=/systemexport CLASSPATH=$base/framework/am.jarexec app_process $base/bin com.android.commands.am.Am "$@"pm脚本文件如下:
  # Script to start "pm" on the device, which has a very rudimentary# shell.#base=/systemexport CLASSPATH=$base/framework/pm.jarexec 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()入口函数的类。
转载
参考技术A Android作为一个基于Linux的手机操作系统,对于各种应用程序的支持是其最大的特点。也是开发人员需要关注的地方。我们在这里就为大家详细介绍一下有关Android启动Java程序的具体应用技巧,以方便大家对这一操作系统功能的解读。

首先进入shell

C:\Documents and Settings\mawenjian>adb shell
看一下命令的帮助

# am -help
am -help
Error: Unknown command: -help
usage: am [start|instrument]
am start [-a < ACTION>] [-d < DATA_URI>]
[-t < MIME_TYPE>]
[-c < CATEGORY> [-c < CATEGORY>] ...]
[-e < EXTRA_KEY> < EXTRA_VALUE>
[-e < EXTRA_KEY> < EXTRA_VALUE> ...]
[-n < COMPONENT>] [-D] [< URI>]
am instrument [-e < ARG_NAME> < ARG_VALUE>]
[-p < PROF_FILE>]
[-w] < COMPONENT>
好了,试一下启动浏览器

# am start -n com.google.android.browser/
com.google.android.browser.BrowserActivity
am start -n com.google.android.browser/com.google.
android.browser.BrowserActivity
Starting: Intent comp=com.google.android.browser/
com.google.android.browser.BrowserActivity
ok,成功了

试试下面的命令吧:

# am start -a android.intent.action.VIEW -d
http://mwjian.javaeye.com
am start -a android.intent.action.VIEW -d
http://mwjian.javaeye.com
Starting: Intent action=android.intent.action.VIEW
data=http://mwjian.javaeye.com
# am start -a android.intent.action.CALL -d tel:88888888
am start -a android.intent.action.CALL -d tel:88888888
Starting: Intent action=android.intent.action.CALL
data=tel:88888888
# am start -a android.intent.action.ALL_APPS
am start -a android.intent.action.ALL_APPS
Starting: Intent action=android.intent.action.ALL_APPS
# am start -a android.intent.action.VIEW geo:0,0?q=shanghai
am start -a android.intent.action.VIEW geo:0,0?q=shanghai
Starting: Intent action=android.intent.action.VIEW
data=geo:0,0?q=shanghai

如何在 Android 上重新启动 Qt 或 c++ 中的程序?

【中文标题】如何在 Android 上重新启动 Qt 或 c++ 中的程序?【英文标题】:How to restart a program in Qt or c++ on Android? 【发布时间】:2014-03-14 20:06:34 【问题描述】:

我目前有一个 Android 程序启动,然后加载新设置,但是当加载设置和新设置时,应用程序需要重新启动才能使用这些新设置。我的问题是如何使用 qt 和 c++ 重新启动一个 android 应用程序我已经看到了一些在 java 中执行此操作的方法,但我似乎无法从 qt 中的 c++ 中找到任何方法。感谢您的帮助!

【问题讨论】:

【参考方案1】:

这篇文章描述了一个解决方案:how to restart my own qt application?

获取程序的可执行文件/名称可以使用 QApplication::instance()->arguments()[0]; http://doc.qt.io/qt-5/qcoreapplication.html#arguments

#include <QApplication>
#include <QProcess>

....//inside function

  QApplication* qApp = QApplication::instance();
  qApp->quit();
  QProcess::startDetached(qApp->arguments()[0], qApp->arguments());

【讨论】:

以上是关于如何在Android中启动JAVA程序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 packageManager 在 android java 中获取克隆的应用程序?

Android 程序在系统中如何完成启动

如何在 Android 上重新启动 Qt 或 c++ 中的程序?

如何在 android studio (java) 中清除通知

如何从 Android 应用程序中启动统一游戏?

无法在 android studio 上启动应用程序是不是显示 java.lang.NullPointerException: