知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
JNI由淺入深_5_基本類型應(yīng)用
發(fā)表時間:2020-10-19
發(fā)布人:葵宇科技
瀏覽次數(shù):53
1、根本類型應(yīng)用
對于JNI處理根本類型照樣比較簡單的,下面是Java代碼:
<span style="font-size:14px;"> public native int intMethod(int n); public native boolean booleanMethod(boolean bool);</span>膳綾擎的辦法是在Java中寫的,留意要加native關(guān)鍵字,這兩個辦法都比較簡單,分別傳入int ,boolean類型到j(luò)ni中,經(jīng)由處理返回。下面是jni的代碼:
<span style="font-size:14px;">JNIEXPORT jint JNICALL Java_com_example_jniandroid_service_SimpleObject_intMethod( JNIEnv * env, jobject obj, jint val) { return val * val; } JNIEXPORT jboolean JNICALL Java_com_example_jniandroid_service_SimpleObject_booleanMethod( JNIEnv * env, jobject obj, jboolean val) { return !val; }</span>
2、根本數(shù)據(jù)類型的數(shù)組應(yīng)用
2.1 c處理Java的int[],并返回該數(shù)組元素的總和。
public native int intArrayMethod(int[] intArray);
/** * 求數(shù)組的和,返回一個int類型 */ JNIEXPORT jint JNICALL Java_com_example_jniandroid_service_SimpleObject_intArrayMethod( JNIEnv * env, jobject obj, jintArray array) { int i, sum = 0; //獲取數(shù)組的長度 jsize len = (*env)->GetArrayLength(env, array); //取得數(shù)組首地址的指針 jint *body = (*env)->GetIntArrayElements(env, array, 0); for (i = 0; i < len; i++) { //獲取數(shù)組中的元素 sum += body[i]; } //釋放資本 (*env)->ReleaseIntArrayElements(env, array, body, 0); LOGD("數(shù)組總和 =%d", sum); return sum; }2.2 native辦法返回一個int[].
public native int[] receiverIntArray();對應(yīng)的c簽名
/** * 返回Java的int[]類型 */ JNIEXPORT jintArray JNICALL Java_com_example_jniandroid_service_SimpleObject_receiverIntArray( JNIEnv * env, jobject obj) { int i = 1; jintArray array; //定義數(shù)組對象 array = (*env)->NewIntArray(env, 10); for (; i <= 10; i++) { //void SetIntArrayRegion(jintArray array, jsize start, jsize len,const jint *buf)// len:為1 (*env)->SetIntArrayRegion(env, array, i - 1, 1, &i); } /* 獲取數(shù)組對象的元素個數(shù) */ int len = (*env)->GetArrayLength(env, array); /* 獲取數(shù)組中的所有元素 */ jint* elems = (*env)->GetIntArrayElements(env, array, 0); for (i = 0; i < len; i++) { LOGD("ELEMENT %d IS %d\n", i, elems[i]); } return array; }
3、JNI處理string類型和String數(shù)組
public native String stringMethod(String text); public native String[] receiverStringArray(String val);下面是jni的實現(xiàn),在c文件的前面聲明數(shù)組長度 #define ARRAY_LENGTH 5 。第一個辦法是將一個字符串中的每個字符轉(zhuǎn)換成大年夜寫,第二辦法返回一個String類型的數(shù)組。這里用到了FindClass辦法,它重要根據(jù)類的包名找到該類的class,在經(jīng)由過程new辦法創(chuàng)建對象。
JNIEXPORT jstring JNICALL Java_com_example_jniandroid_service_SimpleObject_stringMethod( JNIEnv * env, jobject obj, jstring string) { const char *str = (*env)->GetStringUTFChars(env, string, 0); char cap[128]; //copy字符串 strcpy(cap, str); (*env)->ReleaseStringUTFChars(env, string, str); int i = 0; for (i = 0; i < strlen(cap); i++) { //轉(zhuǎn)換成大年夜寫 *(cap + i) = (char) toupper(*(cap + i)); } return (*env)->NewStringUTF(env, cap); } /** * 返回Java字符串?dāng)?shù)組 */ JNIEXPORT jobjectArray JNICALL Java_com_example_jniandroid_service_SimpleObject_receiverStringArray( JNIEnv * env, jobject obj, jstring val) { //FindClass找到Java中String這個類,返回jni的jclass對象 jclass objClass = (*env)->FindClass(env, "java/lang/String"); //NewObjectArray創(chuàng)建對象數(shù)組,第二個參數(shù)長度,第三個類型 jobjectArray texts = (*env)->NewObjectArray(env, (jsize) ARRAY_LENGTH,objClass, 0); jstring jstr; char* sa[] = { "Hello,", "world", "jni", "iii", "愛逝世你了" }; int i = 0; for (; i < ARRAY_LENGTH; i++) { //創(chuàng)建jstring并賦值,NewStringUTF()函數(shù)將C說話的字符串轉(zhuǎn)換為jstring類型 jstr = (*env)->NewStringUTF(env, sa[i]); //賦值 (*env)->SetObjectArrayElement(env, texts, i, jstr); //必須放入jstring } return texts; }
相關(guān)案例查看更多
相關(guān)閱讀
- 網(wǎng)站建設(shè)首頁
- 網(wǎng)站制作
- 云南做軟件
- 云南網(wǎng)站制作哪家好
- 云南網(wǎng)站建設(shè)公司排名
- 云南小程序開發(fā)制作
- 網(wǎng)絡(luò)公司電話
- 霸屏推廣
- 模版消息
- 報廢車回收管理軟件
- 做網(wǎng)站
- 昆明做網(wǎng)站
- painter
- 迪慶小程序開發(fā)
- web教程
- 云南建設(shè)廳官方網(wǎng)站
- 昆明網(wǎng)絡(luò)公司
- 云南網(wǎng)站建設(shè)服務(wù)公司
- 云南小程序開發(fā)推薦
- 云南建站公司
- 小程序用戶登錄
- 昆明小程序代建
- 網(wǎng)站建設(shè)選
- 云南網(wǎng)站建設(shè)方案 doc
- 網(wǎng)站沒排名
- 汽車報廢系統(tǒng)
- 昆明網(wǎng)站建設(shè)公司
- 快排推廣
- 網(wǎng)站建設(shè)首選公司
- 汽車報廢回收軟件