如何将字节数组从android java类传递给JNI C NDK?
Posted
技术标签:
【中文标题】如何将字节数组从android java类传递给JNI C NDK?【英文标题】:How to pass byte array from android java class to JNI C NDK? 【发布时间】:2014-07-09 09:20:28 【问题描述】:我在 java 类中有字节数组,我想将该字节数组传递给 JNI C 类,我无法在 JNI C 中访问该数组,请帮助。
【问题讨论】:
【参考方案1】:您需要像这样(在 Java 中)声明接收数组的 JNI 函数:
私有原生 void sendData(byte[] data);
您可以像调用任何其他函数一样调用该函数:
发送数据(缓冲区);
然后在你的 C 代码中实现这样的函数:
JNIEXPORT void JNICALL Java_com_packageXXX_yourClass_sendData(JNIEnv* env, jobject thiz, jbyteArray 数据);
读取数组:
byte * cData = env->GetByteArrayElements(data, &isCopy);
并发布:
env->ReleaseByteArrayElements(data, cData, JNI_ABORT);
上面的代码是C++。要使其适用于 C,您需要将 jni 环境 (env) 作为您正在调用的函数的第一个参数传递,如下所示:
(*env)->GetByteArrayElements(env,...)
【讨论】:
感谢您的出色回答,但我有一个问题,无法解决方法“GetByteArrayElements”,,,如何消除此错误????当我尝试使用 env 方法时,它总是显示给我?? env->ReleaseByteArrayElements(data, cData, JNI_ABORT);也无法解决 如果你使用纯 C,那么你需要 (*env)->GetByteArrayElements(env, array, isCopy)。查看此链接:docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/… 我在 jni.h 中得到了这个方法的引用,但是虽然出现了“GetByteArrayElements”错误 现在我的代码中有这个并且它运行良好:short * cData = (short*)env->GetShortArrayElements(data, &isCopy);查看上面链接中列出的函数,GetByteArrayElements() 也可用。您确定传递给函数的数组是 jbyteArray 吗?您在编写 C 或 C++ 代码吗?以上是关于如何将字节数组从android java类传递给JNI C NDK?的主要内容,如果未能解决你的问题,请参考以下文章