我正在为 U-Touch 开发一个应用程序,使用 libthumbnailer 系统库以 C++ 代码从视频中获取缩略图。该应用程序在我的计算机上完美地制作了缩略图,但当我尝试在设备上执行该部分时,我得到了
(vs-thumb:5759): GLib-ERROR **: /build/buildd/glib2.0-2.41.5/./glib/gmem.c:353: overflow allocating 4294967274*8 bytes
抛出“std::runtime_error”实例后调用终止 what():尝试提取视频截图时出现未知错误,返回值为 133。
如果我使用 adb shell 进入并尝试手动执行:
/usr/lib/arm-linux-/gnueabihf/thumbnailer/vs-thumb video.mp4 thumb.jpg
我收到错误:
Error creating thumbnail: Failed to preroll.
但如果我执行与 su 相同的控制台操作,它就会工作。所以我怀疑这与应用程序权限有关。有人知道我应该如何配置 apparmor(或我需要的任何其他东西)才能获得以 root 身份执行此缩略图程序的权限吗?
提前致谢
答案1
您可以尝试使用不受限制模板。
在您的应用程序清单文件中,您应该有以下几行:
"hooks": {
"myapp": {
"apparmor": "myapp.json",
"desktop": "myapp.desktop"
}
},
然后在myapp.json
apparmor 配置文件中,使用以下代码片段:
{
"policy_groups": [],
"policy_version": 1.2,
"template": "unconfined"
}
看:应用限制
答案2
我终于找到了比使用不受约束的模板更好的解决方案。它比想象的要简单……只需要包含“视频”作为政策组的一部分:
"policy_groups": [
...
"networking",
"video",
...
]
如果您另外需要访问视频文件,您还可以添加“video_files_read”(仅读取视频文件)或“video_files”(完全访问)。
在 Ubuntu Sdk 中开发应用程序时,您可以检查所有可用的策略组,进入 QtCreator,转到“发布”选项卡并双击 app.apparmor 文件。您将看到一个 + 符号,单击后将显示所有策略。您可以在以下位置找到更多信息http://developer.ubuntu.com/publish/apps/packaging-click-apps/