相信Android開(kāi)發(fā)者都喜歡用C++編寫(xiě)一些高效的應(yīng)用,,有關(guān)Android NDK的C++開(kāi)發(fā)相關(guān)知識(shí)總結(jié)如下:
從Android NDK r5開(kāi)始支持了STL Port,,在這個(gè)版本開(kāi)始就可以使用部分STL庫(kù)的功能了,比如說(shuō)vector,、string擺脫c下面容易出現(xiàn)的數(shù)組未初始化、越界,,增強(qiáng)應(yīng)用的健壯性。
很多網(wǎng)友包含了include <vector>
這樣頭,,但仍然無(wú)法編譯,這里你首先要檢查當(dāng)前文件是否為.cpp后綴,,同時(shí)為了使用標(biāo)準(zhǔn)庫(kù)必須加入 APP_STL :=
stlport_static 在Application.mk文件中,。相關(guān)對(duì)應(yīng)還有
system - 使用默認(rèn)最小的C++運(yùn)行庫(kù),,這樣生成的應(yīng)用體積小,,內(nèi)存占用小,但部分功能將無(wú)法支持
stlport_static - 使用STLport作為靜態(tài)庫(kù),,這項(xiàng)是Android開(kāi)發(fā)網(wǎng)極力推薦的
stlport_shared - STLport 作為動(dòng)態(tài)庫(kù),,這個(gè)可能產(chǎn)生兼容性和部分低版本的Android固件,目前不推薦使用,。
gnustl_static - 使用 GNU libstdc++ 作為靜態(tài)庫(kù)
默認(rèn)情況下STLPORT是不支持C++異常處理和RTTI,,所以不要出現(xiàn) -fexceptions 或 -frtti ,,如果真的需要可以使用gnustl_static來(lái)支持標(biāo)準(zhǔn)C++的特性,但生成的文件體積會(huì)偏大,,運(yùn)行效率會(huì)低一些,。
支持C++異常處理,在Application.mk中加入 LOCAL_CPPFLAGS +=
-fexceptions這句,,同理支持RTTI,,則加入LOCAL_CPPFLAGS +=
-frtti,這里Android123再次提醒大家,,第二條說(shuō)的使用gnustl靜態(tài)庫(kù),,而不是stlport。
強(qiáng)制重新編譯 STLPort ,,在Application.mk中加入 STLPORT_FORCE_REBUILD := true 可以強(qiáng)制重新編譯STLPort源碼,由于一些原因可能自己需要修改下STLPort庫(kù),,一般普通的開(kāi)發(fā)者無(wú)需使用此項(xiàng),。
Android目前最新的NDK版本為r6,相關(guān)的學(xué)習(xí)可以查看NDK中的Samples整體和在PC上開(kāi)發(fā)沒(méi)有太大的不同,。
|
|