Android.mk檔案簡單分析,android.mk分析

來源:互聯網
上載者:User

Android.mk檔案簡單分析,android.mk分析

Android.mk檔案簡單分析

 

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


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

  1)APK程式,一般的Android程式,編譯打包產生apk檔案

  2)JAVA庫,java類庫,編譯打包產生jar檔案

  3)  C\C++應用程式,可執行檔C\C++應用程式

  4)C\C++靜態庫,編譯產生C\C++靜態庫,並打包成.a檔案

  5)C\C++共用庫, 編譯產生共用庫(動態連結程式庫),並打包成.so, 有且只有共用庫才能被安裝/複製到應用軟體(APK)包中。


一個簡單的例子


一個簡單的"hello world",比如下面的檔案:

sources/helloworld/helloworld.c 

sources/helloworld/Android.mk

相應的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:映象組建目錄


Android系統檔案夾結構詳細解析?

\\system\\app
這個裡面主要存放的是常規下載的應用程式,可以看到都是以APK格式結尾的檔案。在這個檔案夾下的程式為系統預設的組件,自己安裝的軟體將不會出現在這裡,而是\\data\\檔案夾中。下面是詳細的介紹:
\\system\\app\\AlarmClock.apk 鬧鐘
\\system\\app\\AlarmClock.odex
\\system\\app\\Browser.apk 瀏覽器
\\system\\app\\Browser.odex
\\system\\app\\Bugreport.apk Bug報告
\\system\\app\\Bugreport.odex
\\system\\app\\Calculator.apk 計算機
\\system\\app\\Calculator.odex
\\system\\app\\Calendar.apk 日曆
\\system\\app\\Calendar.odex
\\system\\app\\CalendarProvider.apk 日曆提供
\\system\\app\\CalendarProvider.odex
\\system\\app\\Camera.apk 照相機
\\system\\app\\Camera.odex
\\system\\app\\com.amazon.mp3.apk 亞馬遜音樂
\\system\\app\\Contacts.apk 連絡人
\\system\\app\\Contacts.odex
\\system\\app\\DownloadProvider.apk 下載提供
\\system\\app\\DownloadProvider.odex
\\system\\app\\DrmProvider.apk DRM數字著作權提供
\\system\\app\\DrmProvider.odex
\\system\\app\\Email.apk 電子郵件用戶端
\\system\\app\\Email.odex
\\system\\app\\FieldT......餘下全文>>
 
協助 android 中的一個簡單的布局剖析

安卓搜尋視圖控制項,在eclipse 面板控制項中可以找到這個控制項的表徵圖。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.