JNI使用Android 5 +将参数传递回Java

时间:2015-07-01 15:14:10

标签: java android java-native-interface native

我有这个本机代码来取回一系列短裤:)

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填充。

任何人都有提示为什么会这样?

1 个答案:

答案 0 :(得分:0)

引用Get<PrimitiveType>ArrayElements()的{​​{3}}:

  

由于返回的数组可能是Java数组的副本,因此在调用Release<PrimitiveType>ArrayElements()之前,对返回数组所做的更改不一定会反映在原始数组中。

因此,在从C ++函数返回之前,您应该使用RelaseShortArrayElements调用mode == 00表示&#34;复制内容并释放elems缓冲区&#34; )。