#include
#include"com_example_ndkpassdata_DataProvider.h"
#include
#include
#defineLOG_TAG"clog"
#defineLOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#defineLOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
/**
*将Java中的字符串转换成为C语言的字符
*/
char*Jstring2CStr(JNIEnv*env,jstringjstr)
{
char*rtn=NULL;
jclassclsstring=(*env)->FindClass(env,"java/lang/String");
jstringstrencode=(*env)->NewStringUTF(env,"GB2312");
jmethodIDmid=(*env)->GetMethodID(env,clsstring,"getBytes","(Ljava/lang/String;)[B");
jbyteArraybarr=(jbyteArray)(*env)->CallObjectMethod(env,jstr,mid,strencode);// String .getByte("GB2312");
jsizealen=(*env)->GetArrayLength(env,barr);
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);//
returnrtn;
}
JNIEXPORT jint JNICALL Java_com_example_ndkpassdata_DataProvider_add
(JNIEnv * env, jobject jobject, jint x, jint y){
//想在logcat控制台上打印日志
LOGD("x=%d",x);
LOGI("y=%d",y);
// log.i(TAG,"sss");
returnx+y;
}
JNIEXPORT jstring JNICALL Java_com_example_ndkpassdata_DataProvider_sayHelloInC
(JNIEnv * env, jobject jobject, jstring str){
char* c="hello";
//在C语言中不能直接操作java中的字符串
//把java中的字符串转换成c语言中char数组
char* cstr=Jstring2CStr(env,str);
strcat(cstr,c);
LOGD("%s",cstr);
return(*env)->NewStringUTF(env,cstr);
}
JNIEXPORT jintArray JNICALL Java_com_example_ndkpassdata_DataProvider_intMethod
(JNIEnv * env, jobject jobject, jintArray jarray){
// jArray遍历数组jint*(*GetIntArrayElements)(JNIEnv*, jintArray, jboolean*);
//数组的长度jsize(*GetArrayLength)(JNIEnv*, jarray);
//对数组中每个元素+5
intlength=(*env)->GetArrayLength(env,jarray);
int* array=(*env)->GetIntArrayElements(env,jarray,0);
inti=0;
for(;i
*(array+i)+=5;
}
returnjarray;
}