android - 在 Android 中通过 C 代码执行命令

标签 android c android-ndk

我想在 C 中执行截图命令 "adb shell/system/bin/screencap -p/sdcard/img.png"。我正在搜索相同的命令,我得到了 a solution for another command我将命令修改为

execl("/system/bin/screencap", "-p", "storage/sdcard0/screenShot.png", (char *)NULL);

但是当我运行我的应用程序并调用上述命令的方法时,应用程序崩溃了。

我应该如何修改“/system/bin/screencap -p/sdcard/img.png”命令以从 C 代码运行。


汤姆回答后更新

应用程序再次关闭,这是日志

06-21 11:52:01.488: I/WindowState(279): WIN DEATH: Window{40fed2c0 u0 com.mytest.ndktestapplication/com.mytest.ndktestapplication.MainActivity}
06-21 11:52:01.498: I/ActivityManager(279): Process com.mytest.ndktestapplication (pid 7745) has died.
06-21 11:52:01.498: W/ActivityManager(279): Force removing ActivityRecord{40ea9ab8 u0 com.mytest.ndktestapplication/.MainActivity}: app died, no saved state

最佳答案

这是 exec() 系列函数的预期结果。

他们所做的是用指定的程序替换当前程序。所以再见应用程序。

为了避免这种情况,您首先需要调用 fork(),然后仅在子进程中调用 exec(),如下所示:

if (!fork()) {
    // fork() returned zero, so we are in the child
    execl...
}

在调用 exec 函数之前,您可能还必须进行一些清理工作。

但请注意,在大多数设备上,您将无法从应用程序截取屏幕截图,因为应用程序代码在没有权限的用户 ID 下运行。但我似乎记得在很短的时间内,某些设备在未经许可的情况下出厂时会检查此功能,因此它可能适用于这些设备。

关于android - 在 Android 中通过 C 代码执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17234244/

相关文章:

C++ 从 'char' 到 'const char' 的无效转换

android - 如何删除操作菜单项的背景?

Android 9patch 拉伸(stretch)箭头?

java - Eclipse 错误“文档中跟随根元素的标记必须格式正确

c - 优化 NEON XOR 实现

android - dlopen 在旧版 Android 上失败

android - 我如何在Android代码中知道build.gradle中参数的值是什么

c - 想要将一些数据写入 abc.txt 文件的特定行号。如何不使用 fseek 或 fwrite 移动到特定行?

Android NDK 和 CPU 架构

android - 双模块定义错误