Android系統(tǒng)之Android.mk學(xué)習(xí)總結(jié)
時(shí)間:2020-09-08 01:56:50
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]點(diǎn)擊上方嵌入式開發(fā)圈記得關(guān)注我們哦! 1、設(shè)置當(dāng)前模塊的編譯路徑為當(dāng)前文件夾路徑 LOCAL_PATH := $(call my-dir) 2、清理(可能由其他模塊設(shè)置過的)編譯環(huán)境中用到的變量 include $(CLEAR_VARS) 3、模塊編譯變量 變量 用途 LOCAL_SRC_FILES 當(dāng)前模塊包含的源
1、設(shè)置當(dāng)前模塊的編譯路徑為當(dāng)前文件夾路徑
LOCAL_PATH := $(call my-dir)
2、清理(可能由其他模塊設(shè)置過的)編譯環(huán)境中用到的變量
include $(CLEAR_VARS)
3、模塊編譯變量
變量 用途LOCAL_SRC_FILES 當(dāng)前模塊包含的源代碼文件LOCAL_MODULE 當(dāng)前模塊的名稱,這個(gè)名稱應(yīng)當(dāng)是唯一的,模塊間的依賴關(guān)系就是通過這個(gè)名稱來引用的LOCAL_C_INCLUDES C/C++ 語言需要的頭文件的路徑LOCAL_STATIC_LIBRARIES 當(dāng)前模塊在靜態(tài)編譯時(shí),需要的靜態(tài)庫LOCAL_SHARED_LIBRARIES 當(dāng)前模塊在運(yùn)行時(shí)依賴的動(dòng)態(tài)庫LOCAL_CFLAGS C/C++編譯器的參數(shù)include $(BUILD_EXECUTABLE)# -I$(LOCAL_C_INCLUDES) 指定頭文件搜索路徑# -l$(LOCAL_SHARED_LIBRARIES) 指令鏈接的動(dòng)態(tài)庫gcc $(LOCAL_CFLAGS) $(LOCAL_SRC_FILES) -o $(LOCAL_MODULE) -I$(LOCAL_C_INCLUDES) $(LOCAL_STATIC_LIBRARIES) -l$(LOCAL_SHARED_LIBRARIES)LOCAL_JAVA_LIBRARIES 當(dāng)前模塊依賴的Java共享庫LOCAL_STATIC_JAVA_LIBRARIES 當(dāng)前模塊依賴的Java靜態(tài)庫LOCAL_PACKAGE_NAME 當(dāng)前模塊的APK應(yīng)用的名稱LOCAL_CERTIFICATE 簽署當(dāng)前應(yīng)用的證書名稱LOCAL_MODULE_TAGS 當(dāng)前模塊所包含的標(biāo)簽,Android.mk的必選,一個(gè)模塊可以包含多個(gè)標(biāo)簽標(biāo)簽的值可能是debug, eng, tests, samples 或 optionalbuild/core/definitions.mk通常會(huì)用下面函數(shù)獲取上面環(huán)境變量的值:提供配置編譯需要的函數(shù)$(call my-dir) 獲取當(dāng)前文件夾路徑$(call all-subdir-java-files) 獲取當(dāng)前目錄子目錄下所有的java源代碼文件$(call all-java-files-under, 目錄) 獲取指定目錄下的所有Java文件$(call all-c-files-under, 目錄) 獲取指定目錄下的所有C語言文件$(call all-Iaidl-files-under, 目錄) 獲取指定目錄下的所有 AIDL 文件$(call all-makefiles-under, 目錄) 獲取指定目錄下的所有Make文件
4、模塊類型
BUILD_EXECUTABLE 編譯目標(biāo)機(jī)上的可執(zhí)行文件(ELF)BUILD_STATIC_LIBRARY 編譯目標(biāo)機(jī)上的靜態(tài)庫(*.a 編譯時(shí)使用)BUILD_SHARED_LIBRARY 編譯目標(biāo)機(jī)上的動(dòng)態(tài)庫文件(*.so)BUILD_JAVA_LIBRARY 編譯目標(biāo)機(jī)上的java動(dòng)態(tài)庫BUILD_STATIC_JAVA_LIBRARY 編譯目標(biāo)機(jī)上的java靜態(tài)庫BUILD_PACKAGE 編譯目標(biāo)機(jī)上的java包
5、幾個(gè)常見的模板
5.1、編譯可執(zhí)行程序的模板
LOCAL_PATH := $(call my-dir)#include $(CLEAR_VARS)LOCAL_SRC_FILES:= main.cLOCAL_MODULE:= test_exe#LOCAL_C_INCLUDES :=#LOCAL_STATIC_LIBRARIES :=#LOCAL_SHARED_LIBRARIES :=include $(BUILD_EXECUTABLE)(菜鳥級別解釋::=是賦值的意思,$是引用某變量的值)LOCAL_SRC_FILES中加入源文件路徑,LOCAL_C_INCLUDES 中加入所需要包含的頭文件路徑,LOCAL_STATIC_LIBRARIES加入所需要鏈接的靜態(tài)庫(*.a)的名稱,LOCAL_SHARED_LIBRARIES中加入所需要鏈接的動(dòng)態(tài)庫(*.so)的名稱,LOCAL_MODULE表示模塊最終的名稱,BUILD_EXECUTABLE表示以一個(gè)可執(zhí)行程序的方式進(jìn)行編譯。
5.2、編譯靜態(tài)庫的模板
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES:= \helloworld.cLOCAL_MODULE:= libtest_static#LOCAL_C_INCLUDES :=#LOCAL_STATIC_LIBRARIES :=#LOCAL_SHARED_LIBRARIES :=include $(BUILD_STATIC_LIBRARY)一般的和上面相似,BUILD_STATIC_LIBRARY表示編譯一個(gè)靜態(tài)庫。
5.3、編譯動(dòng)態(tài)庫的模板
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES:= \helloworld.cLOCAL_MODULE:= libtest_sharedTARGET_PRELINK_MODULES := false#LOCAL_C_INCLUDES :=#LOCAL_STATIC_LIBRARIES :=#LOCAL_SHARED_LIBRARIES :=include $(BUILD_SHARED_LIBRARY)一般的和上面相似,BUILD_SHARED_LIBRARY表示編譯一個(gè)共享庫。以上三者的生成結(jié)果分別在如下,generic依具體target會(huì)變:out/target/product/xxxx/obj/EXECUTABLEout/target/product/xxxxx/obj/STATIC_LIBRARYout/target/product/xxxx/obj/SHARED_LIBRARY每個(gè)模塊的目標(biāo)文件夾分別為:1.可執(zhí)行程序:XXX_intermediates2.靜態(tài)庫:XXX_static_intermediates3.動(dòng)態(tài)庫:XXX_shared_intermediates
5.4、編譯一個(gè)簡單apk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)# Build all java files in the java subdirectoryLOCAL_SRC_FILES := $(call all-subdir-java-files)# Name of the APK to buildLOCAL_PACKAGE_NAME := LocalPackage# Tell it to build an APKinclude $(BUILD_PACKAGE)
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場,如有問題,請聯(lián)系我們,謝謝!





