JNI 使用 Android 将参数传递回 Java 5+
JNI passing of arguments back to Java with Android 5+
我正在使用本机代码取回一组短裤 :)
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;
}
它适用于所有小于 5 的 Android 版本。由于 Android 5 本机代码本身工作正常,但 java 端的 short[]
已填充只是 0
.
有人知道为什么会发生这种情况吗?
引用 JNI documentation 的 Get<PrimitiveType>ArrayElements()
:
Since the returned array may be a copy of the Java array, changes made to the returned array will not necessarily be reflected in the original array until Release<PrimitiveType>ArrayElements()
is called.
因此,在从 C++ 函数返回之前,您应该使用 mode == 0
调用 RelaseShortArrayElements
(0
表示 "copy back the content and free the elems buffer")。
我正在使用本机代码取回一组短裤 :)
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;
}
它适用于所有小于 5 的 Android 版本。由于 Android 5 本机代码本身工作正常,但 java 端的 short[]
已填充只是 0
.
有人知道为什么会发生这种情况吗?
引用 JNI documentation 的 Get<PrimitiveType>ArrayElements()
:
Since the returned array may be a copy of the Java array, changes made to the returned array will not necessarily be reflected in the original array until
Release<PrimitiveType>ArrayElements()
is called.
因此,在从 C++ 函数返回之前,您应该使用 mode == 0
调用 RelaseShortArrayElements
(0
表示 "copy back the content and free the elems buffer")。