在android ndk中共享内存

时间:2014-02-25 11:43:11

标签: java android 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工具中提供此功能的目的是什么。

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

1 个答案:

答案 0 :(得分:2)

ndk中提供了

libcutils.so 以启用renderscript integration。它仍然是一个未记录的系统库,因为Android不承诺在所有平台上支持所有API,特别是在未来的平台上,请参阅on android-ndk user group上的更多内容。

这就是说,我应该承认,使用ashmem是非常安全的,因为从第1节开始就明确documented in Java API。我写了一个简短的解决方案来链接libcutils.so elsewhere on SO

以下是关于ashmem_create_region() API的讨论以及IPC的注意事项:https://groups.google.com/forum/m/#!topic/android-platform/L6a6Xvn4HSI tl; nr :您仍需要Binder进行握手。

您的Java代码可以使用某些workarounds访问fd

更新:新的NDK r9d已用完, libcutils.so 不再位于platforms/android-19/arch-arm/usr/lib目录中,因为{{3}在下面的评论中承诺。