Java androidndk中的共享内存

Java androidndk中的共享内存,java,android,android-ndk,Java,Android,Android Ndk,我想在Android中将大数据从一个进程/应用程序传输到另一个进程/应用程序,但在Java层中使用内存文件创建共享内存的一些方法不起作用 于是我尝试在android native中创建共享内存,在我读到的某个地方 可以使用ashmem_创建_区域API。但是看起来这个API是不可访问的或是不开放的。它在唇表皮内 哪个在 android-ndk-r9c/platforms/android-19/arch-arm/usr/lib/rs/libcutils.so 问题1。如何在android本机代码

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

于是我尝试在android native中创建共享内存,在我读到的某个地方
可以使用ashmem_创建_区域API。但是看起来这个API是不可访问的或是不开放的。它在唇表皮内

哪个在

android-ndk-r9c/platforms/android-19/arch-arm/usr/lib/rs/libcutils.so
问题1。如何在android本机代码中访问此库

问题2。如果无法访问,那么在ndk工具中提供此功能的目的是什么


第三季度。如果我以某种方式链接了libcutils.so,并且能够使用libcutils.so在本机中创建共享内存,那么我可以使用此fd在Java层中映射MemoryFile,这样就可以避免为每个数据事务编写应用程序本机副本。

libcutils.so在ndk中提供以启用。它仍然是一个未记录的系统库,从这个意义上讲,Android并没有承诺在所有平台上支持其所有API,特别是在未来的平台上,请参阅更多

这就是说,我应该承认使用ashmem是相当安全的,因为它是从第1节开始明确的。我为链接libcutils.so写了一个简短的解决方案

这里讨论了
ashmem\u create\u region()
API和IPC的注意事项:tl;nr:握手时仍需要活页夹

您的Java代码可以使用一些


更新:新的NDK已经发布,libcutils。因此,不再在
platforms/android-19/arch-arm/usr/lib
目录中,正如下面的评论中所承诺的那样。

在查看了您的评论后,我在下面尝试了链接lib的其他问题,我还将libcutils.so从android-ndk-r9c/platforms/android-19/arch arm/usr/lib/rs/libcutils.so LOCAL_LDLIBS:=-llog LOCAL_LDLIBS+=-L$(LOCAL_PATH)复制到我的libs/armeabi文件夹中/libs/libcutils.so LOCAL_LDLIBS+=-lcutils仍然给出错误:在RS NDK包中找不到-lcutils不依赖libcutils.so;它被错误地包括在内,并将在不久的将来被删除。(所有的.SOs都被删除了,只有静态lib会保留下来)@Sachin:如果你正确地从
Android.mk
复制了libcutil,你将libcutil复制到
/libs/armeabi
,并告诉链接器在
/libs
中查找它;难怪没有找到。但是根据的评论,我建议从您的设备或模拟器中提取库。您也可以从官方git存储库复制,并将其(或其必要部分)静态链接到您的库中。感谢大家,我能够在我的项目中链接这个库,现在我有了共享内存的有效fd。我在申请中通过了同样的考试。我通过调用PercelFileDescriptor by pfd=ParcelFileDescriptor.adoptFd(fd)来共享此fd;并将此pfd发送到其他远程应用程序/进程。在这个远程进程中,我获取PercelFileDescriptor,通过它FileDescriptor fd=pfd.getFileDescriptor();FileOutputStream fos=新的FileOutputStream(fd);FileChannel fc=fos.getChannel();int len=fc.write(bytebuf);一些关于如何写入len=0的建议,以及为什么写入len=0的建议failing@TimMurray:请注意,(截至)
build/core/build binary.mk
仍然将皮肤和
lib/rs
中的一些剩余部分列为合法的系统库。