gpt4 book ai didi

android - 从 native c 代码执行 Android 应用程序

转载 作者:太空狗 更新时间:2023-10-29 14:15:11 24 4
gpt4 key购买 nike

继续我之前的 question ,我成功地从 Android 应用程序执行了一个进程。现在我可以看到我想要的两个进程,它们都已启动并正在运行。现在我需要从 native C 代码执行 Android 应用程序。

找到了类似的问题(12),但以下解决方案对我不起作用。

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com