#include <stdio.h>
#include <jni.h>
#include "com_example_ndkpassdata_DataProvider.h"
#include <android/log.h>
#include<malloc.h>
#define LOG_TAG "System.out.c"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
char
* Jstring2CStr(JNIEnv* env, jstring jstr) {
char
* rtn = NULL;
jclass clsstring = (*env)->FindClass(env,
"java/lang/String"
);
//String
jstring strencode = (*env)->NewStringUTF(env,
"GB2312"
);
// 得到一个java字符串 "GB2312"
jmethodID mid = (*env)->GetMethodID(env, clsstring,
"getBytes"
,
"(Ljava/lang/String;)[B"
);
//[ String.getBytes("gb2312");
jbyteArray barr = (jbyteArray)(*env)->CallObjectMethod(env, jstr, mid,
strencode);
// String .getByte("GB2312");
jsize alen = (*env)->GetArrayLength(env, barr);
// byte数组的长度
jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE);
if
(alen > 0) {
rtn = (
char
*)
malloc
(alen + 1);
//"\0"
memcpy
(rtn, ba, alen);
rtn[alen] = 0;
}
(*env)->ReleaseByteArrayElements(env, barr, ba, 0);
//
return
rtn;
}
JNIEXPORT jint JNICALL Java_com_example_ndkpassdata_DataProvider_add(
JNIEnv *env, jobject obj, jint x, jint y) {
LOGD(
"x=%d"
, x);
LOGD(
"y=%d"
, y);
return
x + y;
}
JNIEXPORT jstring JNICALL Java_com_example_ndkpassdata_DataProvider_sayHelloInc(
JNIEnv *env, jobject obj, jstring jstr) {
char
*cstr = Jstring2CStr(env, jstr);
LOGD(
"cstr=%s"
, cstr);
char
arr[7] = {
' '
,
'h'
,
'e'
,
'l'
,
'l'
,
'o'
,
'/0'
};
strcat
(cstr, arr);
LOGD(
"newcstr=%s"
, cstr);
return
(*env)->NewStringUTF(env, cstr);
}
JNIEXPORT jintArray JNICALL Java_com_example_ndkpassdata_DataProvider_intMethod(
JNIEnv *env, jobject obj, jintArray arr) {
int
len = (*env)->GetArrayLength(env, arr);
LOGD(
"SHUZU length-=%d"
, len);
jint *intarr = (*env)->GetIntArrayElements(env, arr, 1);
int
i = 0;
for
(; i < len; i++) {
LOGD(
"intarr[%d]=%d"
, i, intarr[i]);
*(intarr + i) += 10;
//intarr[i] += 10;
}
(*env)->ReleaseIntArrayElements(env, arr, intarr, len);
return
arr;
}
JNIEXPORT jint JNICALL Java_com_example_ndkpassdata_DataProvider_sub(
JNIEnv *env, jclass clazz, jint x, jint y) {
LOGD(
"x=%d"
, x);
LOGD(
"Y=%d"
, y);
return
x - y;
}