继续我之前的 question ,我成功地从 Android 应用程序执行了一个进程。现在我可以看到我想要的两个进程,它们都已启动并正在运行。现在我需要从 native 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);
以上所有行都没有执行任何操作。
即使按如下方式使用 fork
执行 execl
命令也无济于事。
if (!fork()) {
execl...
}
你能给我一些线索吗? 谢谢。
更新:我已经设法将 stdout 打印到 Android 日志,我得到了 errno
"Exec format error"
来自 execl 方法的消息。有人知道我该如何解决这个问题吗?
最佳答案
也许您可以从 Android/Java/VM 范围编写此代码,然后使用 NDK 和 JNI(Java native 接口(interface))从 native 代码调用它?
示例:
来自您的应用:
class MyActivity extends Activity {
public native int nativeMethodName();
public void launchSomeAppMethod() {
// launch some app
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.package.someapp");
startActivity(LaunchIntent);
}
}
native :
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);
}
希望对你有帮助。
关于android - 从 native c 代码执行 Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22832560/