NDK是否为消息队列提供支持?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NDK是否为消息队列提供支持?相关的知识,希望对你有一定的参考价值。
我正在尝试使用android ndk构建一个共享库。运行ndk build时出现此错误
fatal error: 'mqueue.h' file not found
根据我对谷歌搜索的理解,问题是Android确实提供了对某些POSIX或System V功能(如消息队列)的支持。
所以我想知道这是否正确?如果是的话,我的选择是什么 - 我可以对我的应用程序进行哪些更改以模仿消息队列?
(我在Ubuntu 14.04 PC上使用android-ndk-r16b)
是的,Android上不支持POSIX消息队列,以及其他一些SysV IPC机制。简而言之,这是因为可能导致无法恢复的资源泄漏。这不仅适用于“忘记”释放所获得的IPC资源而且适用于每个资源的错误应用程序。原因是Android集中使用kill(app_pid, SIGKILL)
从后台进程回收系统资源,刚刚由用户启动。结果应用程序死亡,没有机会执行拆卸。内核无法释放IPC资源,因为它们可能以不可预测的方式被其他进程共享(与文件描述符和虚拟内存不同)。请记住,Android主要在资源受限的硬件上运行,因此某些此类资源重新排列是不可避免的。更多背景是here。旧NDK包中包含此文档,但在某些时候它已被删除。
IPC在Android上的替代方式通常包括基于Binder
的解决方案。在本机代码中,您可以使用ashmem
为共享内存段提供接口。最新的平台版本向它公开了公共API,请参阅<android/sharedmem.h>
。但是对于较旧平台的事件,您可以通过与ashmem驱动程序的直接交互来实现类似的功能,请参阅libcutils
来源。
最后,您仍然可以使用管道,UNIX域套接字和可能命名的管道(当然,如果底层文件系统支持这样的inode)。
以上是关于NDK是否为消息队列提供支持?的主要内容,如果未能解决你的问题,请参考以下文章
是否有提供 Amazon SQS 高可用性的 FIFO 消息队列服务?
Android Studio“不推荐使用当前的 NDK 支持”
Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )(代码片段