學(xué)習(xí)Android NDK MakeFile

MakeFile介紹

NDK中的MakeFile有Application.mk和Android.mk兩個文件組成析苫,
Application.mk是對整個項目的全局性描述,比如編譯的平臺锻煌,編譯的優(yōu)化選項等;Android.mk是項目中某一個模塊的編譯腳本,在其中指定Module的名稱,需要編譯的代碼文件痰催,以及需要包含的頭文件等兜辞。

Application.mk

Application.mk 相對較少迎瞧,我們一般只需要關(guān)注以下幾個常用的選項

  • APP_ABI
    用來指定需要編譯的平臺,如果我們的so就是在手機上使用逸吵,armeabi-v7a基本上可以適配大部分手機了凶硅,部分x86平臺的手機內(nèi)部有個轉(zhuǎn)化器,會自動把arm的指令轉(zhuǎn)化到x86平臺扫皱,當(dāng)然這有一定的性能損耗足绅。
APP_ABI := armeabi-v7a 
  • APP_PLATFORM
    用來指定Android 平臺的版本,不同的版本差異主要是有些系統(tǒng)庫不能在低版本使用韩脑,比如opengles v2版本需要在Android 2.0以上使用氢妈,如果需要使用opengles v2,需要設(shè)置APP_PLATFORM為android-5:
APP_PLATFORM := android-5
  • APP_STL
    用來指定C++標準庫的不同實現(xiàn)段多,默認值是libstdc++首量,是最基本版本的C++標準庫實現(xiàn),可能我們的代碼中用到了libstdc++不支持的函數(shù)进苍,我們需要指定其他實現(xiàn):
APP_STL := gnustl_static

- APP_PROJECT_PATH
指定項目的路徑加缘,一般我們的項目是放在jni目錄下的,可以不用指定觉啊。

- APP_BUILD_SCRIPT
指定NDK編譯腳本的文件名稱拣宏,如果編譯腳本名稱為Android.mk, 可以不用指定。

Android.mk

基礎(chǔ)結(jié)構(gòu)

Android.mk編寫我們一般有一些固定的順序, 以下是最簡單的Android.mk結(jié)構(gòu)

LOCAL_PATH := $(call my-dir)
 
include $(CLEAR_VARS)
 
LOCAL_MODULE    := test
LOCAL_SRC_FILES := test.c
 
include $(BUILD_SHARED_LIBRARY)
  • LOCAL_PATH := $(call my-dir)
    設(shè)置當(dāng)前的代碼路徑杠人,LOCAL_PATH指向Android.mk所在的目錄

  • include $(CLEAR_VARS)
    清除LOCAL_xxx指定的變量勋乾,清理后才能避免多個模塊相互影響

  • LOCAL_MODULE := test
    指定當(dāng)前模塊的名稱為test,生成后的文件為libtest.so

  • LOCAL_SRC_FILES := test.c
    指定需要編譯的源碼文件嗡善,不需要列出頭文件

  • include $(BUILD_SHARED_LIBRARY)
    編譯生成動態(tài)鏈接庫

引用外部動態(tài)鏈接庫

首先中Android.mk文件中將共享庫聲明為一個獨立的模塊

include $(CLEAR_VARS)
LOCAL_MODULE := avcodec 
LOCAL_SRC_FILES := prebuilt/ffmpeg/libavcodec.so    
include $(PREBUILT_SHARED_LIBRARY) 

在自己的模塊中再使用以下代碼引用這個模塊

LOCAL_C_INCLUDES :=  prebuilt/ffmpeg/include/
LOCAL_SHARED_LIBRARIES:=avcodec
  • LOCAL_C_INCLUDES := prebuilt/ffmpeg/include/
    使用外部動態(tài)庫市俊,編譯需要用到外部庫的頭文件

  • LOCAL_SHARED_LIBRARIES:=avcodec
    指定當(dāng)前模塊需要引用的共享鏈接庫模塊

使用系統(tǒng)庫

如果我們在代碼中需要使用系統(tǒng)庫,比如LOG庫滤奈,我們需要加入以下代碼, 就可以引用系統(tǒng)的/system/lib/liblog.so了摆昧。

LOCAL_LDLIBS := -llog
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蜒程,隨后出現(xiàn)的幾起案子绅你,更是在濱河造成了極大的恐慌伺帘,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忌锯,死亡現(xiàn)場離奇詭異伪嫁,居然都是意外死亡,警方通過查閱死者的電腦和手機偶垮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門张咳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人似舵,你說我怎么就攤上這事脚猾。” “怎么了砚哗?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵龙助,是天一觀的道長。 經(jīng)常有香客問我蛛芥,道長提鸟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任仅淑,我火速辦了婚禮称勋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涯竟。我一直安慰自己赡鲜,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布昆禽。 她就那樣靜靜地躺著蝗蛙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪醉鳖。 梳的紋絲不亂的頭發(fā)上捡硅,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音盗棵,去河邊找鬼壮韭。 笑死,一個胖子當(dāng)著我的面吹牛纹因,可吹牛的內(nèi)容都是我干的喷屋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瞭恰,長吁一口氣:“原來是場噩夢啊……” “哼屯曹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤恶耽,失蹤者是張志新(化名)和其女友劉穎密任,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偷俭,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡浪讳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涌萤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淹遵。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖负溪,靈堂內(nèi)的尸體忽然破棺而出透揣,到底是詐尸還是另有隱情,我是刑警寧澤笙以,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布淌实,位于F島的核電站冻辩,受9級特大地震影響猖腕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恨闪,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一倘感、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咙咽,春花似錦老玛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至溉苛,卻和暖如春镜廉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背愚战。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工娇唯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寂玲。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓塔插,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拓哟。 傳聞我的和親對象是個殘疾皇子想许,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

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