Android原生库共享内存

Android native library shared memory

本文关键字:内存 共享 原生 Android      更新时间:2023-10-16

我正在编写本机共享库,需要Android支持,并且我需要在使用此库的所有进程之间共享一些数据(UID和一些附加字段)。在Linux中这样做的好机会是POSIX共享内存。但是Android NDK不支持POSIX共享内存。有ashmem,但是为了从其他进程访问共享内存区域,我需要使用绑定IPC来传输打开的文件描述符。但这不是
这是合理的,因为创建区域的进程可能会在其他进程想要访问共享数据时被终止。

有没有办法解决我的问题与Android共享内存?

首先,您不需要Binder,您可以通过Unix本地套接字使用sendmsg()和recvmsg()传递文件描述符。例如,参见[1]

中的SendFd()和ReceiveFd()函数。

第二个ashmem区域是引用计数的,只要在ashmem区域上打开一个文件描述符,它就不会消失,即使创建的进程被杀死。

希望对你有帮助。

[1] https://android.googlesource.com/platform/ndk/+/主/资源/android/crazy_linker/测试/test_util.h