如何在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 上重新启动 Qt 或 c++ 中的程序?
如何在 android studio (java) 中清除通知
无法在 android studio 上启动应用程序是不是显示 java.lang.NullPointerException: