Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android.mk文件簡單分析

Android.mk文件簡單分析

編輯:關於Android編程

 

Android.mk文件簡單分析

一個Android.mk文件用來向編譯系統描述需要編譯的源代碼。具體來說:該文件是GNUMakefile的一小部分,會被編譯系統解析一次或多次。可以在每一個Android.mk中定義一個或多個模塊,也可以在幾個模塊中使用同一個源代碼文件。

 

每個模塊屬下列類型之一:

1)APK程序,一般的Android程序,編譯打包生成apk文件

2)JAVA庫,java類庫,編譯打包生成jar文件

3) CC++應用程序,可執行的CC++應用程序

4)CC++靜態庫,編譯生成CC++靜態庫,並打包成.a文件

5)CC++共享庫, 編譯生成共享庫(動態鏈接庫),並打包成.so, 有且只有共享庫才能被安裝/復制到應用軟件(APK)包中。

 

一個簡單的例子

 

一個簡單的hello world,比如下面的文件:

相應的Android.mk文件會像下面這樣:

 

LOCAL_PATH := $(call my-dir)  
include $(CLEAR_VARS)  
LOCAL_MODULE  := helloworld  
LOCAL_SRC_FILES := helloworld.c  
include $(BUILD_SHARED_LIBRARY)  

 

 

簡單說明:

1,LOCAL_PATH := $(call my-dir) ,一個Android.mk file首先必須定義好LOCAL_PATH變量。它用於在開發樹中查找源文件。在這個例子中,宏函數‘my-dir’, 由編譯系統提供,用於返回當前路徑(即包含Android.mk文件的目錄)。

2,include $( CLEAR_VARS),CLEAR_VARS由編譯系統提供((可以在 android 安裝目錄下的/build/core/config.mk 文件看到其定義,為 CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk)),指定讓GNU MAKEFILE為你清除許多LOCAL_XXX變量(例如 LOCAL_MODULE,LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH 。這是必要的,因為所有的編譯控制文件都在同一個GNU MAKE執行環境中,所有的變量都是全局的。

3,LOCAL_MODULE := helloworld,LOCAL_MODULE變量必須定義,以標識你在Android.mk文件中描述的每個模塊。名稱必須是唯一的,而且不包含任何空格。注意編譯系統會自動產生合適的前綴和後綴,換句話說,一個被命名為'foo'的共享庫模塊,將會生成'libfoo.so'文件。

 

4,LOCAL_SRC_FILES := helloworld.c,LOCAL_SRC_FILES變量必須包含將要編譯打包進模塊中的C或C++源代碼文件。注意,你不用在這裡列出頭文件和包含文件,因為編譯系統將會自動為你找出依賴型的文件;僅僅列出直接傳遞給編譯器的源代碼文件就好。

 

其他常用的還有:

 

5,LOCAL_C_INCLUDES:可選變量,表示頭文件的搜索路徑。默認的頭文件的搜索路徑是LOCAL_PATH目錄。示例:LOCAL_C_INCLUDES := sources/foo或LOCAL_C_INCLUDES := $(LOCAL_PATH)/../foo

 

6,TARGET_ARCH:目標 CPU平台的名字;TARGET_PLATFORM:Android.mk 解析的時候,目標 Android 平台的名字;ARGET_ARCH_ABI:暫時只支持兩個 value,armeabi 和 armeabi-v7a

 

7,LOCAL_STATIC_LIBRARIES: 表示該模塊需要使用哪些靜態庫,以便在編譯時進行鏈接。

 

8,LOCAL_SHARED_LIBRARIES: 表示模塊在運行時要依賴的共享庫(動態庫),在鏈接時就需要,以便在生成文件時嵌入其相應的信息。

 

9,LOCAL_LDLIBS: 編譯模塊時要使用的附加的鏈接器選項。

 

10,LOCAL_ARM_MODE: 默認情況下, arm目標二進制會以 thumb 的形式生成(16 位),你可以通過設置這個變量為 arm如果你希望你的 module 是以 32 位指令的形式

 

11,LOCAL_CFLAGS: 可選的編譯器選項,在編譯 C 代碼文件的時候使用

 

12,include $(call all-subdir-makefiles):返回一個位於當前'my-dir'路徑的子目錄中的所有Android.mk的列表。

 

----------------------

另外:

在Android.mk文件中,還可以指定最後的目標安裝路徑,用LOCAL_MODULE_PATH和LOCAL_UNSTRIPPED_PATH來指定。不同的文件系統路徑用以下的宏進行選擇:

 

TARGET_ROOT_OUT:表示根文件系統out/target/product/generic/root。

TARGET_OUT:表示system文件系統out/target/product/generic/system。

TARGET_OUT_DATA:表示data文件系統out/target/product/generic/data。

OUT_DIR:代碼工程編譯時的out生成目錄

PRODUCT_OUT:映象生成目錄

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved