我有这个本机代码来取回一系列短裤:)
extern "C"
JNIEXPORT jshortArray Java_my_application_CallerClazz_getShortArray(JNIEnv *jenv, jobject self)
{
jshortArray shortArray = jenv->NewShortArray(size);
jshort* p2ji = jenv->GetShortArrayElements(shortArray, JNI_FALSE);
for(int idx = 0; idx < size; idx++)
{
p2ji[idx] = srcArray[idx];
}
return shortArray;
}
适用于所有Android版本&lt; 5.从Android 5开始,本机代码本身工作正常,但java端的short[]
只用0
填充。
任何人都有提示为什么会这样?
答案 0 :(得分:0)
引用Get<PrimitiveType>ArrayElements()
的{{3}}:
由于返回的数组可能是Java数组的副本,因此在调用
Release<PrimitiveType>ArrayElements()
之前,对返回数组所做的更改不一定会反映在原始数组中。
因此,在从C ++函数返回之前,您应该使用RelaseShortArrayElements
调用mode == 0
(0
表示&#34;复制内容并释放elems缓冲区&#34; )。