Android.mk語法解析


Android.mk 相當於 Linux 中的 Makefile 文件,用來向安卓系統描述如何編譯源代碼。該文件會被編譯器解析多次,所以盡量減少在 Android.mk 中聲明變量。

Android.mk 文件可以將源碼打包成模塊,模塊可以是apk、jar包、c/c++應用程序、靜態庫(.a文件)和動態庫(.so)。

動態庫可以被移到應用程序包(apk),靜態庫可以被鏈接入動態庫。

Android.mk 中可以定義一個或者多個模塊,一個源文件也可以打包進多個模塊。

 

 1 # Copyright 2006 The Android Open Source Project
 2 
 3 LOCAL_PATH:= $(call my-dir)
 4 include $(CLEAR_VARS)
 5 
 6 LOCAL_SRC_FILES:= \
 7     rild.c
 8 
 9 LOCAL_SHARED_LIBRARIES := \
10     liblog \
11     libcutils \
12     libril \
13     libdl
14 
15 # temporary hack for broken vendor rils
16 LOCAL_WHOLE_STATIC_LIBRARIES := \
17     librilutils_static
18 
19 LOCAL_CFLAGS := -DRIL_SHLIB
20 
21 ifeq ($(SIM_COUNT), 2)
22     LOCAL_CFLAGS += -DANDROID_SIM_COUNT_2
23 endif
24 
25 LOCAL_MODULE:= rild
26 LOCAL_MODULE_TAGS := optional
27 
28 include $(BUILD_EXECUTABLE)

在 Android.mk 中,注釋以 # 開頭,注釋此行。

 

LOCAL_PATH:= $(call my-dir)

指定當前模塊的目錄。

 

include $(CLEAR_VARS)

清除 LOCAL_PATH 以外的所有 LOCAL_xxx 變量。

 

LOCAL_SRC_FILES:= \

  rild.c

需要編譯的源代碼文件。

 

LOCAL_SHARED_LIBRARIES := \
  liblog \
  libcutils \
  libril \
  libdl

模塊運行時需要依賴的動態庫。

 

LOCAL_WHOLE_STATIC_LIBRARIES := \
  librilutils_static

靜態庫全鏈接。

 

LOCAL_CFLAGS := -DRIL_SHLIB

可選的,用來在編譯c/c++時附加編譯選項。

 

ifeq ($(SIM_COUNT), 2)
  LOCAL_CFLAGS += -DANDROID_SIM_COUNT_2
endif

條件編譯,ifeq判斷相等。

 

LOCAL_MODULE:= rild

生成的模塊名稱,要唯一並且不含空格,系統會自動添加前綴和后綴。

若生成動態庫,則生成 librild.so;若名稱為 librild,則不會添加前綴,依然是 librild.so。

 

LOCAL_MODULE_TAGS := optional

該模塊在所以版本下都編譯。(user版本、eng版本、optional所有版本)

 

include $(BUILD_EXECUTABLE)

指定編譯方法。

BUILD_STATIC_LIBRARY:編譯為靜態庫

BUILD_SHARED_LIBRARY:編譯為動態庫

BUILD_EXECUTABLE:編譯為C可執行程序

BUILD_JAVA_LIBRARY:編譯為Java類庫

BUILD_PACKAGE:編譯為Android應用程序包

 

LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw

指定目標文件最終安裝位置——out/target/product/rk3288/system/lib/hw

 

主要編譯變量
編譯變量 功能
LOCAL_PATH 指定編譯路徑
LOCAL_MODULE 指定編譯模塊名
LOCAL_SRC_FILES 指定編譯源碼列表
LOCAL_SHARED_LIBRARIES 指定使用的c/c++共享庫列表
LOCAL_STATIC_LIBRARIES 指定使用的c/c++靜態庫列表
LOCAL_STATIC_JAVA_LIBRARIES 指定使用的Java庫列表
LOCAL_CFLAGS 指定編譯器參數
LOCAL_C_INCLUDES 指定c/c++頭文件路徑
LOCAL_PACKAGE_NAME 指定Android應用程序名
LOCAL_CERTIFICATE 指定簽名認證
LOCAL_JAVA_LIBRARIES 指定使用的Java庫列表
LOCAL_SDK_VERSION 指定編譯Android應用程序時的SDK版本

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM