?????й?JNI??????????????????Χ??Android?????У?JNI???????C??C++????????????д????JNI??????C?????????????.C??C++?????Щ?????????? Android?????JNI??????C????C++??д???

????Android?????м??????????????????C++??????????????.cpp??????Android Framework??OpenCore??Webkit??SQLite???????C++??????????ú?????Android?????STL?????????C??????????????????飬??C++???????????string??????????????

????1. ???????дC??C++???????

????????Android123???Java??unicode???????jni?е?utf8?????????????jstring?????????????????jni??java???????????????????

????C?????:

????JNIEXPORT jstring JNICALL Java_Android123_CwjC (JNIEnv *env?? jobject obj?? jstring string)

????{

????const char *strUTF = (*env)->GetStringUTFChars(env?? string?? 0);

????char szBuffer[255];

????strcpy(szBuffer?? strUTF);

????(*env)->ReleaseStringUTFChars(env?? string?? strUTF);

????return (*env)->NewStringUTF(env?? szBuffer);

????}

????C++?????:

????JNIEXPORT jstring JNICALL Java_Android123_CwjCpp (JNIEnv *env?? jobject obj?? jstring string)

????{

????const char *strUTF = env->GetStringUTFChars(string?? 0);

????char szBuffer[255];

????strcpy(szBuffer?? strUTF);

????env->ReleaseStringUTFChars(string?? strUTF);

????return env->NewStringUTF(szBuffer);

????}

????????????????????????????????C++????????????

????2. JNI???????????

????JNI?д??????????????jobjectArray ????????????????????jintArray?????????jbooleanArray??????г???jstringArray????????????й????????????????????′ε? Android JNI????????? ?????? ??????????????????????????????????0???????????????????з?????????????JNI??????????????GetArrayLength???????????Java????????????????飬??JNI?н???????????????????????θ???Java?????????

????JNIEXPORT jint JNICALL Java_Android123_CwjTest (JNIEnv *env?? jobject obj?? jintArray array)

????{

????int sum = 0;

????jsize length = (*env)->GetArrayLength(env?? array); //??????鳤??

????if(length==0) //???????????????????????????

????return 0;

????jint *pointer = (*env)->GetIntArrayElements(env?? array?? 0); //??????????

????for (int i=0; i

????{

????sum += pointer[i]; //?????????????

????}

????(*env)->ReleaseIntArrayElements(env?? array?? pointer?? 0); //?????棬???????????

????return sum;

????}