Android Studio NDK開發(fā)-其他編譯選項(xiàng)

NDK即要支持交叉編譯臀脏,還需要支持各個(gè)Android版本的編譯铺峭,還有一些其他情況的編譯槽棍,比如c和c++等捉蚤。NDK提供了一些編譯選項(xiàng),用來支持不同的編譯需求炼七。
以前的NDK開發(fā)都是在Android.mkAppliction.mk中設(shè)置,現(xiàn)在在gradle-experimentalandroid.ndk{}設(shè)置編譯選項(xiàng)缆巧。
其中包含了設(shè)置:編譯器配置,NDK版本,Header頭文件位置,gcc編譯器選項(xiàng)等...
下面介紹下幾個(gè)常用的編譯選項(xiàng)特石。

platformVersion

大部分的App需要向下兼容盅蝗,會(huì)設(shè)置minSdkVersion,從一個(gè)低版本的Sdk開始支持。同樣的在低SDK版本上面運(yùn)行的NDK也必須使用對(duì)應(yīng)的NDK姆蘸,就需要設(shè)置platformVersion墩莫。
設(shè)置minSdkVersion為14,對(duì)應(yīng)的也需要設(shè)置platformVersion也是14:

model{
    android{
        ndk{
            ....
            platfromVersion=14
        }
    }
}

也可以使用paltformVersion "android-14"設(shè)置NDK的版本逞敷。

toolchain

toolchain是NDK下的一套文件系統(tǒng)和工具鏈狂秦,主要有GCC,編譯adnroid的庫和工具等推捐,是本機(jī)編譯工具或交叉編譯工具裂问。
gradle中直接指定toolchaintoolchainVersion

model {
    android {
       ......
       ndk {
            ......
            toolchain "clang"
            toolchainVersion "3.5"
           }
           ......
       }
     }    

ABI

Android系統(tǒng)目前支持其中七種不同的CPU架構(gòu):ARMv5,ARMv7,x86,MIPS,ARMv8,MIP64,x86_64,每一種都關(guān)聯(lián)著一個(gè)相應(yīng)的ABI。
Application Binary interface應(yīng)用程序二進(jìn)制接口,定義了二進(jìn)制文件(尤其是.so文件)是如何運(yùn)行在相應(yīng)的系統(tǒng)平臺(tái)上的牛柒,從使用的指令集堪簿,內(nèi)存到對(duì)齊到可用的系統(tǒng)函數(shù)庫。在Android系統(tǒng)上皮壁,每一CPU架構(gòu)對(duì)應(yīng)一個(gè)ABI椭更。
對(duì)應(yīng)的.so文件會(huì)放在對(duì)應(yīng)的ABI文件下面:

ABI-文件夾

一般情況下,考慮到x86系統(tǒng)的市場(chǎng)份額還太小蛾魄,還有為了減少apk包的大小虑瀑,可以指定支持的平臺(tái),使用abiFilters,可以選擇項(xiàng)目支持的平臺(tái),比如只支持armabiarmeabi-v7a的配置:

...

ndk {
        ...
        abiFilters.addAll(['armabi', 'armeabi-v7a'])
        ...  
     }

 ...

ldLibs

使用NDK開發(fā)Android應(yīng)用時(shí)滴须,會(huì)使用到系統(tǒng)自帶的庫舌狗,在之前的*.mk中的LOCAL_LDLIBS就是用來引用系統(tǒng)庫的,現(xiàn)在使用在Android studio中可以配置ldLibs引用系統(tǒng)庫扔水。
例如在項(xiàng)目中鏈接android的log:

ndk {
       ...
        ldLibs.addAll(['log'])
   }

CFlags和CppFlags

CFlag表示用于C編譯器的選項(xiàng)痛侍。
CppFlags用來表示用于c++的編譯器選項(xiàng).
使用ldLibs告訴了鏈接器要鏈接那些庫文件,而在CFlags和CppFlags可以用來指定.h文件的路徑铭污。
例如指定一個(gè).h文件的目錄:

 ndk {
            ...
            CFlags.addAll(['-I/usr/local/ssl/android-14/include'])
            ...
        }

CFlag也是gcc的編譯選項(xiàng),比如使用-Wall表示打開警告開發(fā)恋日,-g是要生成調(diào)試信用膀篮,生成的可執(zhí)行文件具有和源代碼關(guān)聯(lián)的可調(diào)試信息嘹狞。

stl

stl是設(shè)置c++的運(yùn)行時(shí)庫的選項(xiàng),默認(rèn)使用的是libstdc++最小支持的c++庫岂膳。
如果要使用gnustl_static(靜態(tài)鏈接gnustl版本的stl)可以設(shè)置為:

 ndk {
            ...
            stl = 'gnustl_static'
            cppFlags.addAll(['-std=c++11'])
            ...
      }

這里可以看到NDK支持的對(duì)應(yīng)的c++運(yùn)行庫,建議使用動(dòng)態(tài)方法鏈接stl,這樣可以減少apk的大小。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末磅网,一起剝皮案震驚了整個(gè)濱河市谈截,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涧偷,老刑警劉巖簸喂,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異燎潮,居然都是意外死亡喻鳄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門确封,熙熙樓的掌柜王于貴愁眉苦臉地迎上來除呵,“玉大人,你說我怎么就攤上這事爪喘⊙赵” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵秉剑,是天一觀的道長(zhǎng)泛豪。 經(jīng)常有香客問我,道長(zhǎng)侦鹏,這世上最難降的妖魔是什么诡曙? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮略水,結(jié)果婚禮上价卤,老公的妹妹穿的比我還像新娘。我一直安慰自己聚请,他們只是感情好荠雕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著驶赏,像睡著了一般炸卑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上煤傍,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天盖文,我揣著相機(jī)與錄音,去河邊找鬼蚯姆。 笑死五续,一個(gè)胖子當(dāng)著我的面吹牛洒敏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疙驾,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凶伙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了它碎?” 一聲冷哼從身側(cè)響起函荣,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扳肛,沒想到半個(gè)月后傻挂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挖息,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年金拒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片套腹。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绪抛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沉迹,到底是詐尸還是另有隱情睦疫,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布鞭呕,位于F島的核電站蛤育,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏葫松。R本人自食惡果不足惜瓦糕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腋么。 院中可真熱鬧咕娄,春花似錦、人聲如沸珊擂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摧扇。三九已至圣贸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扛稽,已是汗流浹背吁峻。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人用含。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓矮慕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親啄骇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子痴鳄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 在Android NDK開發(fā)中,有兩個(gè)重要的文件:Android.mk和Application.mk肠缔,各盡其責(zé)夏跷,指...
    f9dd77add98e閱讀 14,006評(píng)論 6 15
  • Android游戲開發(fā)實(shí)踐(1)之NDK與JNI開發(fā)02 承接上篇Android游戲開發(fā)實(shí)踐(1)之NDK與JNI...
    AlphaGL閱讀 3,754評(píng)論 0 24
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,163評(píng)論 25 707
  • 要說起我的老家陜西乾縣哼转,就不得不說下乾縣的著名小吃—乾州四寶明未。乾州是乾縣的舊稱,這里地域遼闊壹蔓,民風(fēng)淳樸趟妥,物產(chǎn)豐富。...
    阿寶來了閱讀 1,835評(píng)論 1 4
  • 氣質(zhì)之于女生佣蓉,恬靜如水披摄,淡淡的妝容使人如沐春風(fēng);氣質(zhì)之于女人勇凭,一身職業(yè)裝疚膊,干練的外形,走路帶風(fēng)虾标,人人為之側(cè)目寓盗。 氣...
    蝸牛up666閱讀 274評(píng)論 0 0