我正在开发一个应用程序,其中我有一个Java的应用层,还有一个服务,不过是一个C++的插件。我需要从应用层调用本机代码API,这些API将通过AOSP框架开发的JNI层调用。
现在的问题是,我需要将一个数据块从应用层传递到本机层,这些数据块将通过JNI调用传递到本机层。
与其直接传递数据,我更愿意使用sharedMemory(或任何高效的方式)。有没有人可以建议我如何将数据从应用程序层传递到本机代码。
是否有任何方法可以在本机层分配内存,并从应用层访问该内存位置,以便将数据存储到该内存位置。
我不能使用用户实现的JNI层。
简短的回答是:没有。
较长的回答:您提到了AOSP,所以我假设您使用的是Android OS。
AOSP中的JNI实现非常特殊,您只能通过函数参数和原语返回值与它进行通信。
使用JNIEnv方法在本机代码中创建Java对象的新实例是可能的,但这是高度不鼓励的。
通常,通过JNI在Java和原生之间移动大量数据的整个过程是有问题的。
有关更多细节,请阅读本文:https://developer.android.com/training/articles/perf-jni