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版本 |
