Return byte array in jni android?

I need to get an array of bytes from jni to Java. Example: I have a byte array of bytes [] a = {1,2,3,4,5,6}

JNIEXPORT jbyteArray JNICALL Java_com_vn_getArray (JNIEnv *env, jobject obj) { jbyte[] a = {1,2,3,4,5,6}; return a; 

}

I do not know how to return an array of bytes from jni.

Can someone help me? You are welcome!

+5
source share
2 answers

In Java, an array is an object. Therefore, to transfer an array of bytes from C or C ++ to java, you need to create an instance of jbyteArray and return it. Instead of array C. To solve this problem, see the following code:

 JNIEXPORT jbyteArray JNICALL Java_Test_returnArray (JNIEnv *env, jobject This) { jbyte a[] = {1,2,3,4,5,6}; jbyteArray ret = env->NewByteArray(6); env->SetByteArrayRegion (ret, 0, 6, a); return ret; } 

Based on this link

+13
source

I like and it works

 JNIEXPORT jbyteArray JNICALL Java_com_vn_getArray(JNIEnv *env, jobject obj) { jbyte byteUrl[] = {1,2,3,3,4}; int sizeByteUrl = 5; jbyteArray data = (*env)->NewByteArray(env, sizeByteUrl); if (data == NULL) { return NULL; // out of memory error thrown } // creat bytes from byteUrl jbyte *bytes = (*env)->GetByteArrayElements(env, data, 0); int i; for (i = 0; i < sizeByteUrl; i++) { bytes[i] = byteUrl[i]; } // move from the temp structure to the java structure (*env)->SetByteArrayRegion(env, data, 0, sizeByteUrl, bytes); return data; } 
+2
source

Source: https://habr.com/ru/post/1205666/


All Articles