欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
【轉】Android JNI開(kāi)發(fā)入門(mén)篇
Android JNI開(kāi)發(fā)入門(mén)篇
時(shí)間:2010-11-04 11:11 來(lái)源:未知 點(diǎn)擊:198次
AndroidJNI開(kāi)發(fā)入門(mén)篇,今后的四篇文章,我們將從頭談?wù)揓ava的調用C++的JNI,以便大家開(kāi)發(fā)出一些功能較強大些的Android應用。如有疑問(wèn),請直接點(diǎn)擊頁(yè)面上的在線(xiàn)客服咨詢(xún)安博中程嵌入式專(zhuān)家,有關(guān)JNI的類(lèi)型方法表示,基本上C層面的類(lèi)型均是j+java過(guò)去的類(lèi)型,比

今后的四篇文章,我們將從頭談?wù)揓ava的調用C++的JNI,以便大家開(kāi)發(fā)出一些功能較強大些的Android應用。如有疑問(wèn),請直接點(diǎn)擊頁(yè)面上的在線(xiàn)客服咨詢(xún)安博中程嵌入式專(zhuān)家。

1.有關(guān)JNI的類(lèi)型方法表示,基本上C層面的類(lèi)型均是j+java過(guò)去的類(lèi)型,比如字符串在JNI的c層面為jstring而Java為String,對于布爾類(lèi)型boolean則為jboolean對應Java中的boolean。

2. 有關(guān)Java類(lèi)的表示在JNI中對應關(guān)系如下

long cwjInfo (int nAge, String sName, int[] arrSalary);

我們可以表示為 "(ILjava/lang/String;[I)J"我們去除雙引號,第一個(gè)(表示一個(gè)參數類(lèi)型,接下來(lái)的I表示第一個(gè)參數為int整形,L代表是一個(gè)類(lèi)class,這里為java/lang/String這個(gè)類(lèi),接下來(lái)是[代表是一個(gè)數組,后面的I代表一個(gè)整形的數組,而)后面的J代表返回類(lèi)型,在JNI中J代表long長(cháng)整形,相關(guān)的對應關(guān)系如下:

V void

Z boolean

B byte

C char

S short

I int

J long

F float

D double

L fully qualified class

[ array type[]

( arg-types

3.Java層傳入的String不能在JNI中直接轉化為jstring,因為Java的內部編碼為unicode,中英文的字符都是每個(gè)占兩個(gè)字節,而jni中我們需要使用utf-8來(lái)表示,utf-8比較特殊中英文是不等長(cháng)的,比如英文等符號的ascii占用一個(gè)字節,而中文則為三個(gè)字節,同時(shí)仍然以\n結尾,所以下面這種錯誤的方法為

JNIEXPORT jstring JNICALL Java_Cwj_ShowLog(JNIEnv *env, jobject obj,jstring log)

{

printf("%s", log); //這樣做是錯誤的,printf不能直接處理Java傳來(lái)的類(lèi)型。

//dosomething 返回jstring等等。

}

而正確的轉換unicode到utf-8方法為使用GetStringUTFChars這個(gè)函數:

JNIEXPORT jstring JNICALL Java_Cwj_ShowLog(JNIEnv *env, jobject obj,jstring log)

{

const jbyte *strDest;

strDest = (*env)->GetStringUTFChars(env, log, NULL);

if (strDest == NULL)

{

return NULL;//這里注意可能因為內存不足,需要拋出OutOfMemoryError異常,所以先返回空,有關(guān)JNI的異常處理我們將在以后的文章中詳細講解

}

printf("%s", strDest); //現在strDest可以用printf顯示了

(*env)->ReleaseStringUTFChars(env, prompt, strDest);//strDest用完了要釋放內存

接下來(lái)我們還需要返回一個(gè)jstring類(lèi)型的,我們可以讓用戶(hù)自己輸入,比如

char szBuf[255]; //分配一個(gè)緩沖區

scanf("%s", szBuf); //接收用戶(hù)輸入

return (*env)->NewStringUTF(env, szBuf); //返回一個(gè)utf-8的即jstring的字符串

}

4. 在JNI中獲取字符串的長(cháng)度不能簡(jiǎn)單的使用strlen這樣的函數,對于不同的處理我們可以通過(guò)GetStringLength獲取一個(gè)Java的unicode類(lèi)型(wchar_t*)的字符串長(cháng)度,或者GetStringUTFLength獲取jni中的utf-8類(lèi)型(char*)字符串長(cháng)度。

5. 最后本文給網(wǎng)友一個(gè)分辨處理jni還是java類(lèi)型的技巧,有關(guān)jni相關(guān)的字符或字符串處理均帶有utf關(guān)鍵字,

比如處理java的unicode類(lèi)型的有:

GetStringChars/ReleaseStringChars GetStringLength NewStringGetStringRegion

而對應jni的utf8類(lèi)型的有:

GetStringUTFChars/ReleaseStringUTFChars GetStringUTFLengthNewStringUTF GetStringUTFRegion

有關(guān)Android的NDK JNI開(kāi)發(fā)相關(guān)內容我們將在下一篇文章中繼續講解。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Android Studio開(kāi)發(fā)JNI示例
JNI 數據類(lèi)型轉換
JNI入門(mén)
JNI官方規范中文版——基本類(lèi)型、字符串、數組
Java本地調用JNI使用規范詳解
【轉】JNI 之二 :java & c/c++ 相互通信及調用
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久