Android.mk簡(jiǎn)析

一.Android.mk文件簡(jiǎn)介:


Android.mk文件主要是告訴編譯系統(tǒng)们衙,以什么樣的規(guī)則編譯你的源代碼雪位,并生成對(duì)應(yīng)的目標(biāo)文件凤藏,目標(biāo)文件可以分為以下幾種:

  • APK程序,一般的Android應(yīng)用程序慕的,系統(tǒng)級(jí)別的直接push即可;
  • JAVA庫(kù)箩张,java類庫(kù)甩骏,編譯打包生成jar文件;
  • C\C++應(yīng)用程序,可執(zhí)行的C\C++應(yīng)用程序;
  • C\C++靜態(tài)庫(kù)先慷,編譯生成C\C++靜態(tài)庫(kù)饮笛,并打包成.a文件;
  • C\C++共享庫(kù), 編譯生成共享庫(kù)(動(dòng)態(tài)鏈接庫(kù))论熙,并打包成.so福青, 有且只有共享庫(kù)才能被安裝/復(fù)制到您的應(yīng)用軟件(APK)包中;
    最后根據(jù)自己的需求使用對(duì)應(yīng)的目標(biāo)文件(常用的是so和jar);

二.簡(jiǎn)單示例:


<pre>
Android環(huán)境下(lunch之后)
1.LOCAL_PATH := $(call my-dir)
2.include $(CLEAR_VARS)
3.LOCAL_MODULE
4.:= helloworld
5.LOCAL_SRC_FILES := helloworld.c
6.include $(BUILD_SHARED_LIBRARY)
</pre>
以上就是利用Android.mk生成so文件的簡(jiǎn)單流程,其實(shí)上述步驟也是一個(gè)簡(jiǎn)單的jni編譯方法。

三.關(guān)鍵參數(shù)說明:


  • LOCAL_PATH := $(call my-dir) -- Android.mk file首先必須定義好LOCAL_PATH變量,它的作用是用于在它的目錄tree中尋找源文件;在這個(gè)例子中无午,宏函數(shù)‘my-dir’, 由編譯系統(tǒng)提供媒役,用于返回當(dāng)前路徑(即包含Android.mk file文件的目錄)
  • include $(CLEAR_VARS) :它的職責(zé)就是清理之前編的LOCAL_XXX文件的;
    例如:LOCAL_MODULE, LOCAL_SRC_FILES,LOCAT_STATIC_LIBRARY等等,但是它不會(huì)去清理LOCAL_PATH. 這個(gè)清理動(dòng)作是必須的宪迟,因?yàn)樗械木幾g控制文件由同一個(gè)GNU Make解析和執(zhí)行酣衷,其變量是全局的。所以清理后才能避免相互影響;
  • LOCAL_MODULE :=helloworld 當(dāng)前編譯模塊的名稱踩验,在編譯文件中是必須要有的鸥诽,而且模塊的名稱必須是唯一的。編譯成功后模塊會(huì)被編譯系統(tǒng)添加一些前綴和后綴箕憾,例如牡借,helloworld,要產(chǎn)生動(dòng)態(tài)庫(kù)袭异,則生成libhelloworld.so. 但請(qǐng)注意:如果模塊名被定為:libhelloworld.則生成libhelloworld.so. 不再加前綴;
  • LOCAL_SRC_FILES := helloworld.c 編譯當(dāng)前模塊所需要的源代碼钠龙,如果在源碼有頭文件的引用,在android.mk不必進(jìn)行聲明御铃,編譯系統(tǒng)會(huì)自己去尋找;
    include $(BUILD_SHARED_LIBRARY) 該模塊最后編譯生成庫(kù)的屬性進(jìn)行說明碴里,有三種屬性:

1、BUILD_STATIC_LIBRARY:靜態(tài)鏈接庫(kù);

2上真、BUILD_SHARED_LIBRARY :動(dòng)態(tài)鏈接庫(kù);

3咬腋、BUILD_EXECUTABLE:native c可執(zhí)行的程序;

以上所述就是一個(gè)基本的Android.mk包含的編譯信息;

五.Android.mk編譯模板:


1.集成jar:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_PATH := $(TARGET_OUT_JAVA_LIBRARIES)
LOCAL_PREBUILT_JAVA_LIBRARIES := goldsand-framework.jar
include $(BUILD_MULTI_PREBUILT)

2.集成so庫(kù):

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)
LOCAL_PREBUILT_LIBS := \
libgoldsand_camera_jni.so \
libgoldsand_native.so
include $(BUILD_MULTI_PREBUILT)

3.集成靜態(tài)庫(kù)a:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libFB
LOCAL_MODULE_PATH := $(TARGET_OUT_STATIC_LIBRARIES)
LOCAL_PREBUILT_LIBS := libFB.a
include $(BUILD_MULTI_PREBUILT)

4.集成APK(引用于MTK ONLINE):

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := Test
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS) # 可選項(xiàng),如果不添加此變量睡互,         鍵預(yù)裝到system/app下, 此apk將不能被卸載就珠, 添加后寇壳,被安裝到data/app目錄下, 可卸載妻怎。

include $(BUILD_PREBUILT)

5.集成可執(zhí)行程序(引用于網(wǎng)絡(luò)):

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE_PATH := $(YOUR_PATH)
LOCAL_SRC_FILES := hellovprc.elf  
LOCAL_MODULE := hellovprc.elf 
LOCAL_MODULE_CLASS := EXECUTABLES 
LOCAL_MODULE_TAGS := debug 
include $(BUILD_PREBUILT)

== 六.項(xiàng)目中Android.mk文件解析:==
loading......

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末壳炎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子逼侦,更是在濱河造成了極大的恐慌匿辩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榛丢,死亡現(xiàn)場(chǎng)離奇詭異铲球,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)涕滋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挠阁,“玉大人宾肺,你說我怎么就攤上這事溯饵。” “怎么了锨用?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵丰刊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我增拥,道長(zhǎng)啄巧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任掌栅,我火速辦了婚禮秩仆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘猾封。我一直安慰自己澄耍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布晌缘。 她就那樣靜靜地躺著齐莲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪磷箕。 梳的紋絲不亂的頭發(fā)上选酗,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音岳枷,去河邊找鬼芒填。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嫩舟,可吹牛的內(nèi)容都是我干的氢烘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼家厌,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼播玖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起饭于,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蜀踏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后掰吕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體果覆,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年殖熟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了局待。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖钳榨,靈堂內(nèi)的尸體忽然破棺而出舰罚,到底是詐尸還是另有隱情,我是刑警寧澤薛耻,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布营罢,位于F島的核電站,受9級(jí)特大地震影響饼齿,放射性物質(zhì)發(fā)生泄漏饲漾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一缕溉、第九天 我趴在偏房一處隱蔽的房頂上張望考传。 院中可真熱鬧,春花似錦倒淫、人聲如沸伙菊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)镜硕。三九已至,卻和暖如春返干,著一層夾襖步出監(jiān)牢的瞬間兴枯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工矩欠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留财剖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓癌淮,卻偏偏與公主長(zhǎng)得像躺坟,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乳蓄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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