首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android中通过C代码执行命令

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

Stack Overflow用户
提问于 2013-06-21 11:33:43
回答 2查看 3.8K关注 0票数 1

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

代码语言:javascript
运行
复制
execl("/system/bin/screencap", "-p", "storage/sdcard0/screenShot.png", (char *)NULL);

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

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

在汤姆回答后更新

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

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-21 12:08:39

这是exec()家族函数的预期结果。

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

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

代码语言:javascript
运行
复制
if (!fork()) {
    // fork() returned zero, so we are in the child
    execl...
}

在调用exec函数之前,还可能需要进行一些清理。

然而,注意到,在大多数设备上,您将无法从应用程序中获取屏幕快照,因为应用程序代码运行在一个用户id下,而用户id没有这样做的许可。但是,我似乎还记得,有些设备在没有对此功能进行权限检查的情况下发布的时间很短,因此它可能会在这些功能上工作。

票数 3
EN

Stack Overflow用户

发布于 2013-06-21 11:45:08

调用是

代码语言:javascript
运行
复制
execl(path, arg0, arg1, ..., (char*) NULL);

第二个参数,arg0,是程序被告知用来调用它的名称。给程序的实际参数只从arg1开始。

因此,您应该将代码更改为

代码语言:javascript
运行
复制
execl("/system/bin/screencap", "screencap", "-p", "<pic>", (char *)NULL);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17234244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档