一.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......