//調用Android原生log打印功能
#include <android/log.h>
#define LOG_TAG "jni>>"
#define LOGE(format, ...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, format, ##__VA_ARGS__)
//傳入byte[]輸出byte[]
extern "C"
JNIEXPORT jbyteArray JNICALL
Java_com_mysterycode_myjni_MainActivity_convertByte(JNIEnv *env, jobject thiz, jbyteArray source) {
//------jbyteArray -> char*------
jbyte *jb = env->GetByteArrayElements(source, JNI_FALSE);
int chars_len = env->GetArrayLength(source);
char *chars = new char[chars_len + 1];
memset(chars, 0, chars_len + 1);
memcpy(chars, jb, chars_len + 1);
//末尾補0以終止
chars[chars_len] = 0;
env->ReleaseByteArrayElements(source, jb, 0);
LOGE("cb>>%c", chars[0] + 80);//%c爲站位符,%c->char*,%s->char*
for(int i=0;i<chars_len;i++){
chars[i]+=3;
}
//-------char* -> jbyteArray------
jbyteArray ja=env->NewByteArray(chars_len);
jbyte *b=env->GetByteArrayElements(ja,JNI_FALSE);//獲取byte[]地址
memcpy(b,chars, chars_len);//複製實際內容
env->SetByteArrayRegion(ja,0,chars_len,b);//**從C向Java提交操作(關鍵)**
env->ReleaseByteArrayElements(ja, b, 0);//釋放指針,避免內存泄漏
return ja;
}