android編譯系統(tǒng)makefileAndroidmk寫法_第1頁
android編譯系統(tǒng)makefileAndroidmk寫法_第2頁
android編譯系統(tǒng)makefileAndroidmk寫法_第3頁
android編譯系統(tǒng)makefileAndroidmk寫法_第4頁
android編譯系統(tǒng)makefileAndroidmk寫法_第5頁
免費預覽已結束,剩余3頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、android 編譯系統(tǒng)的 makefile 文件 Android.mk 寫法如下(l)Android.mk 文件首先需要指定 LOCAL_PATH 變量,用于查找源文件。由于一般情況下Android.mk 和需要編譯的源文件在同一目錄下,所以定義成如下形式:LOCAL_PATH:=$(callmy-dir)上面的語句的意思是將 LOCAL_PATH 變量定義成本文件所在目錄路徑。(2)Android.mk 中可以定義多個編譯模塊,每個編譯模塊都是以 include$(CLEAR_VARS)開始以 include$(BUILD_XXX)結束。include$(CLEAR_VARS)CLEAR_

2、VARS 由編譯系統(tǒng)提供,指定讓 GNUMAKEFILE 為你清除除 LOCAL_PATH 以外的所有 LOCAL_XXX 變量,如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES 等。include$(BUILD_STATIC_LIBRARY)表示編譯成靜態(tài)庫include$(BUILD_SHARED_LIBRARY)表示編譯成動態(tài)庫。include$(BUILD_EXECUTABLE)表示編譯成可執(zhí)行程序(3)舉例如下(frameworks/base/libs/audioflinger/An

3、droid.mk):LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)模塊一ifeq($(AUDIO_POLICY_TEST),true)ENABLE_AUDIO_DUMP:=trueendifLOCAL_SRC_FILES:=AudioHardwareGeneric.cppAudioHardwareStub.cppAudioHardwareInterface.cppifeq($(ENABLE_AUDIO_DUMP),true)LOCAL_SRC_FILES+=AudioDumpInterface.cppLOCAL_CFLAGS+=-DENABLE_AU

4、DIO_DUMPendifLOCAL_SHARED_LIBRARIES:=libcutilslibutilslibbinderlibmedialibhardware_legacyifeq($(strip$(BOARD_USES_GENERIC_AUDIO),true)LOCAL_CFLAGS+=-DGENERIC_AUDIOendifLOCAL_MODULE:=libaudiointerfaceifeq($(BOARD_HAVE_BLUETOOTH),true)LOCAL_SRC_FILES+=A2dpAudioInterface.cppLOCAL_SHARED_LIBRARIES+=liba

5、2dpLOCAL_CFLAGS+=-DWITH_BLUETOOTH-DWITH_A2DPLOCAL_C_INCLUDES+=$(callinclude-path-for,bluez)endifinclude$(BUILD_STATIC_LIBRARY)模塊一編譯成靜態(tài)庫include$(CLEAR_VARS)模塊二LOCAL_SRC_FILES:=AudioPolicyManagerBase.cppLOCAL_SHARED_LIBRARIES:=libcutilslibutilslibmediaifeq($(TARGET_SIMULATOR),true)LOCAL_LDLIBS+=-ldlel

6、seLOCAL_SHARED_LIBRARIES+=libdlendifLOCAL_MODULE:=libaudiopolicybaseifeq($(BOARD_HAVE_BLUETOOTH),true)LOCAL_CFLAGS+=-DWITH_A2DPendififeq($(AUDIO_POLICY_TEST),true)LOCAL_CFLAGS+=-DAUDIO_POLICY_TESTendifinclude$(BUILD_STATIC_LIBRARY)模塊二編譯成靜態(tài)庫include$(CLEAR_VARS)模塊三LOCAL_SRC_FILES:=AudioFlinger.cppAudi

7、oMixer.cpp.armAudioResampler.cpp.armAudioResamplerSinc.cpp.armAudioResamplerCubic.cpp.armAudioPolicyService.cppLOCAL_SHARED_LIBRARIES:=libcutilslibutilslibbinderlibmedialibhardware_legacyifeq($(strip$(BOARD_USES_GENERIC_AUDIO),true)LOCAL_STATIC_LIBRARIES+=libaudiointerfacelibaudiopolicybaseLOCAL_CFL

8、AGS+=-DGENERIC_AUDIOelseLOCAL_SHARED_LIBRARIES+=libaudiolibaudiopolicyendififeq($(TARGET_SIMULATOR),true)LOCAL_LDLIBS+=-ldlelseLOCAL_SHARED_LIBRARIES+=libdlendifLOCAL_MODULE:=libaudioflingerifeq($(BOARD_HAVE_BLUETOOTH),true)LOCAL_CFLAGS+=-DWITH_BLUETOOTH-DWITH_A2DPLOCAL_SHARED_LIBRARIES+=liba2dpendi

9、fifeq($(AUDIO_POLICY_TEST),true)LOCAL_CFLAGS+=-DAUDIO_POLICY_TESTendififeq($(TARGET_SIMULATOR),true)ifeq($(HOST_OS),linux)LOCAL_LDLIBS+=-lrt-lpthreadendifendififeq($(BOARD_USE_LVMX),true)LOCAL_CFLAGS+=-DLVMXLOCAL_C_INCLUDES+=vendor/nxpLOCAL_STATIC_LIBRARIES+=liblifevibesLOCAL_SHARED_LIBRARIES+=liblv

10、mxservice#LOCAL_SHARED_LIBRARIES+=liblvmxipcendifinclude$(BUILD_SHARED_LIBRARY)模塊三編譯成動態(tài)庫(4)編譯一個應用程序(APK)LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)#BuildalljavafilesinthejavasubdirectoryLOCAL_SRC_FILES:=$(callall-subdir-java-files)#NameoftheAPKtobuildLOCAL_PACKAGE_NAME:=LocalPackage#Tellittobuilda

11、nAPKinclude$(BUILD_PACKAGE)(5)編譯一個依賴于靜態(tài) Java 庫(static.jar)的應用程序LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)#ListofstaticlibrariestoincludeinthepackageLOCAL_STATIC_JAVA_LIBRARIES:=static-library#BuildalljavafilesinthejavasubdirectoryLOCAL_SRC_FILES:=$(callall-subdir-java-files)#NameoftheAPKtobuildLO

12、CAL_PACKAGE_NAME:=LocalPackage#TellittobuildanAPKinclude$(BUILD_PACKAGE)(6)編譯一個需要用平臺的 key 簽名的應用程序LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)#BuildalljavafilesinthejavasubdirectoryLOCAL_SRC_FILES:=$(callall-subdir-java-files)#NameoftheAPKtobuildLOCAL_PACKAGE_NAME:=LocalPackageLOCAL_CERTIFICATE:=pla

13、tform#TellittobuildanAPKinclude$(BUILD_PACKAGE)(7)編譯一個需要用特定 key 前面的應用程序LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)#BuildalljavafilesinthejavasubdirectoryLOCAL_SRC_FILES:=$(callall-subdir-java-files)#NameoftheAPKtobuildLOCAL_PACKAGE_NAME:=LocalPackageLOCAL_CERTIFICATE:=vendor/example/certs/app#Tell

14、ittobuildanAPKinclude$(BUILD_PACKAGE)(8)添加一個預編譯應用程序 LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)#Modulenameshouldmatchapknametobeinstalled.LOCAL_MODULE:=LocalModuleNameLOCAL_SRC_FILES:=$(LOCAL_MODULE).apkLOCAL_MODULE_CLASS:=APPSLOCAL_MODULE_SUFFIX:=$(COMMON_ANDROID_PACKAGE_SUFFIX)include$(BUILD_PRE

15、BUILT)(9)添加一個靜態(tài) JAVA 庫 LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)#BuildalljavafilesinthejavasubdirectoryLOCAL_SRC_FILES:=$(callall-subdir-java-files)#AnylibrariesthatthislibrarydependsonLOCAL_JAVA_LIBRARIES:=android.test.runner#ThenameofthejarfiletocreateLOCAL_MODULE:=sample#Buildastaticjarfile.i

16、nclude$(BUILD_STATIC_JAVA_LIBRARY)(10)Android.mk 的編譯模塊中間可以定義相關的編譯內(nèi)容,也就是指定相關的變量如下:LOCAL_AAPT_FLAGSLOCAL_ACP_UNAVAILABLELOCAL_ADDITIONAL_JAVA_DIRLOCAL_AIDL_INCLUDESLOCAL_ALLOW_UNDEFINED_SYMBOLSLOCAL_ARM_MODELOCAL_ASFLAGSLOCAL_ASSET_DIRLOCAL_ASSET_FILES 在 Android.mk 文件中編譯應用程序(BUILD_PACKAGE)時設置此變量,表示資源文

17、件,通常會定義成 LOCAL_ASSET_FILES+=$(callfind-subdir-assets)LOCAL_BUILT_MODULE_STEMLOCAL_C_INCLUDES 額外的 C/C+編譯頭文件路徑,用 LOCAL_PATH 表示本文件所在目錄舉例如下:LOCAL_C_INCLUDES+=extlibs/zlib-1.2.3LOCAL_C_INCLUDES+=$(LOCAL_PATH)/srcLOCAL_CC 指定 C 編譯器LOCAL_CERTIFICATE 簽名認證LOCAL_CFLAGS 為 C/C+編譯器定義額外的標志(如宏定義),舉例:LOCAL_CFLAGS+=-

18、DLIBUTILS_NATIVE=1LOCAL_CLASSPATHLOCAL_COMPRESS_MODULE_SYMBOLSLOCAL_COPY_HEADERSinstall 應用程序時需要復制的頭文件,必須同時定義 LOCAL_COPY_HEADERS_TOLOCAL_COPY_HEADERS_TOinstall應用程序時復制頭文件的目的路徑LOCAL_CPP_EXTENSION 如果你的 C+文件不是以 cpp 為文件后綴,你可以通過 LOCAL_CPP_EXTENSION 指定 C+文件房綴名如:LOCAL_CPP_EXTENSION:=.cc 注意統(tǒng)一模塊中 C+文件后綴必須保持一致。

19、LOCAL_CPPFLAGS 傳遞額外的標志給 C+編譯器,如:LOCAL_CPPFLAGS+=-ffriend-injectionLOCAL_CXX 指定 C+編譯器LOCAL_DX_FLAGSLOCAL_EXPORT_PACKAGE_RESOURCESLOCAL_FORCE_STATIC_EXECUTABLE 如果編譯的可執(zhí)行程序要進行靜態(tài)鏈接(執(zhí)行時不依賴于任何動態(tài)庫),則設置 LOCAL_FORCE_STATIC_EXECUTABLE:=true目前只有 libc 有靜態(tài)庫形式,這個只有文件系統(tǒng)中/sbin 目錄下的應用程序會用到,這個目錄下的應用程序在運行時通常文件系統(tǒng)的其它部分還沒

20、有加載,所以必須進行靜態(tài)鏈接。LOCAL_GENERATED_SOURCESLOCAL_INSTRUMENTATION_FORLOCAL_INSTRUMENTATION_FOR_PACKAGE_NAMELOCAL_INTERMEDIATE_SOURCESLOCAL_INTERMEDIATE_TARGETSLOCAL_IS_HOST_MODULELOCAL_JAR_MANIFESTLOCAL_JARJAR_RULESLOCAL_JAVA_LIBRARIES 編譯 java 應用程序和庫的時候指定包含的 java 類庫,目前有 core 和 framework 兩種多數(shù)情況下定義成:LOCAL_J

21、AVA_LIBRARIES:=coreframework注意 LOCAL_JAVA_LIBRARIES 不是必須的,而且編譯 APK 時不允許定義(系統(tǒng)會自動添加)LOCAL_JAVA_RESOURCE_DIRSLOCAL_JAVA_RESOURCE_FILESLOCAL_JNI_SHARED_LIBRARIESLOCAL_LDFLAGS 傳遞額外的參數(shù)給連接器(務必注意參數(shù)的順序)LOCAL_LDLIBS 為可執(zhí)行程序或者庫的編譯指定額外的庫,指定庫以-lxxx格式,舉例:LOCAL_LDLIBS+=-lcurses-lpthreadLOCAL_LDLIBS+=-Wl,-z,originLOCAL_MODULE 生成的模塊的名稱(注意應用程序名稱用 LOCAL_PACKAGE_NAME 而不是 LOCAL_MODULE)LOCAL_MODULE_PATH 生成模塊的路徑LOCAL_MODULE_STEMLOCAL_MODULE_TAGS 生成模塊的標記LOCAL_NO_DEFAULT_COMPILER_FLAGSLOCAL_NO_EMMA_COMPILELOCAL_NO_EMMA_INSTRUMENTLOCAL_NO_STANDARD_LIBRARIESLOCAL_OVERRIDES_PACKAGE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論