继续我之前的question,我成功地从Android应用程序执行了一个进程。现在我可以看到两个我喜欢的过程,它们都可以运行。现在我需要从本机C代码执行Android应用程序。
1. execl("/system/bin/sh", "sh", "-c", "am start -a android.intent.action.MAIN -n com.android.browser/.BrowserActivity", (char *)NULL);
2. execl("/system/bin/am", "start", "-a", "android.intent.action.MAIN",
"-n", "com.android.settings/.Settings", (char *)NULL);
上述所有行都没有执行任何操作。
即使按execl
执行fork
命令也没有帮助。
if (!fork()) {
execl...
}
你能告诉我某种线索吗?
感谢。
更新:我已经设法将标准输出打印到Android日志,我得到了错误
来自execl方法的"执行格式错误"
消息。有人知道如何解决这个问题吗?
答案 0 :(得分:1)
也许您可以从Android / Java / VM范围编写此内容,并使用NDK& amp ;;从本机代码调用它。 JNI(Java Native Interface)?
示例:
来自您的应用:
class MyActivity extends Activity {
public native int nativeMethodName();
public void launchSomeAppMethod() {
// launch some app
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.package.someapp");
startActivity(LaunchIntent);
}
}
原生:
jint Java_com_yourpackage_appname_MyActivity_nativeMethodName(JNIEnv* env, jobject thiz) {
//....
// do your native work here
// ...
// call your obj instance that can launch another app
jclass cls = (*env)->GetObjectClass(env, thiz);
jmethodID method = (*env)->GetMethodID(env, cls, "launchSomeAppMethod", "()V");
(*env)->CallVoidMethod(env, thiz, method);
}
希望有帮助的人。
答案 1 :(得分:0)
印刷的错误闻起来像许可问题。
您是否尝试从SD卡运行该应用程序?默认情况下,SD卡在没有执行权限的情况下安装,您需要重新安装它。