在android ndk中共享内存

我想将大数据从一个进程/应用程序传输到Android中的另一个进程/应用程序,但是一些如何使用Java层中的内存文件创建共享内存不起作用。

然后尝试在我读过的某个地方创建了android native中的共享内存
可以使用ashmem_create_region API。 但看起来这个API无法访问或打开。 它在libcutils.so里面。

在…

android-ndk-r9c/platforms/android-19/arch-arm/usr/lib/rs/libcutils.so 

Q1。 如何在Android本机代码中访问此库。

Q2。 如果无法访问,那么在ndk工具中提供此function的目的是什么。

Q3。 如果以某种方式我链接libcutils.so并能够使用libcutils.so在本机创建共享内存然后我可以使用此fd与Java层中的MemoryFile映射,这样它将避免应用程序本机副本为每个数据事务写入。

libcutils.so在ndk中提供以启用renderscript集成 。 它仍然是一个未记录的系统库,因为Android不承诺在所有平台上支持所有API,特别是在未来的平台上,请参阅android-ndk用户组 。

这就是说,我应该承认使用ashmem是非常安全的,因为它从v.1开始在Java API中明确记录 。 我写了一个简短的解决方案,用于在其他地方链接libcutils.so。

以下是关于ashmem_create_region() API的讨论以及IPC的注意事项: https : ashmem_create_region()tl; nr :你还需要Binder握手。

您的Java代码可以使用一些变通方法访问fd

更新:新的NDK r9d已经用完,而libcutils.so已不在platforms/android-19/arch-arm/usr/lib目录中,正如@Tim Murray在下面的评论中承诺的那样。