歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android.mk中系統變量的介紹

Android.mk中系統變量的介紹

日期:2017/3/1 9:49:13   编辑:Linux編程

在讀Android.mk文件時,大家會遇到大量的系統的變量,如果不明白他們的含義,這將會嚴重的阻礙你的閱讀,最終糊裡糊塗的讀完,下面我介紹下我學習這些變量的筆記,和大家一起分享,有錯誤或解釋不到的地方期望大家給我留言,一起討論學習。

Android.mk的變量

一.自定義變量:

在Android.mk文件中自定義變量要遵守以下規則:

1.不能以LOCAL_開頭(例如:LOCAL_path);

2.不能以PRIVATE_、NDK_、APP_開頭

3.不能全用小寫字母(例如:my-dir)

4.建議使用MY_前綴的自定義變量

5.最重要是不能與NDK編譯系統保留的變量名一樣。

二.NDK編譯系統保留的變量及其介紹:

1.CLEAR_VARS

指出了編譯腳本中清除了“include$(CLEAR_VARS)”和“include$(BUILD_XXX)”之間的幾乎所有的LOCAL_XXX變量,即本模塊中不包含的所有的全局變量,在新模塊腳本開始時必須包含的變量。通常一個功能模塊以“include$(CLEAR_VARS)”開始。

2.BUILD_SHARED_LIBRARY

指出了一個編譯腳本收集一個模塊中所有的LOCAL_XXX變量的信息,並確定在你的資源文件下如何編譯一個動態庫。通常一個模塊以“include $(BUILD_XXX)”結束。

注意:在這個模塊中必須包含LOCAL_MODULE和LOCAL_SRC_FILES變量並賦值。模塊將會編譯LOCAL_SRC_FILES指定的資源文件生成一個名為“lib$(LOCAL_MODULE).so”文件

3.BUILD_STATIC_LIBRARY

同第2條類似它編譯出了一個靜態庫

指出了一個編譯腳本收集一個模塊中所有的LOCAL_XXX變量的信息,並確定在你的資源文件下如何編譯一個靜態庫。生成一個名為“include $(LOCAL_MODULE).a”文件

4.PREBUILT_SHARED_LIBRARY

指出了一個編譯腳本來編譯一個預動態庫,在編譯預動態庫中LOCAL_SRC_FILES必須是一個單一的路徑而不是一系列的資源文件。

5.PREBUILT_STATIC_LIBRARY

與第4條類似,它編譯成一個預靜態庫

指出了一個編譯腳本來編譯一個預靜態庫,在編譯預靜態庫中LOCAL_SRC_FILES必須是一個單一的路徑而不是一系列的資源文件。

注意:PREBUILT_STATIC/SHARED_LIBRARY與STATIC/SHARED_LIBRARY的區別在於:

1.預動/靜態庫中,LOCAL_SRC_FILES指定的是一個單一的路徑,在此目錄下可以放編好的動/靜態庫,在編譯系統時可直接進行編譯,也即是說,有此變量不需要源代碼,只要有編好的庫即可,這樣就可以使用所有的不開源的第三方庫。

2.可以直接放一個你自己編好的庫,這樣在編譯系統時省略了編譯此庫的時間,從而提過編譯速率。

6.TARGET_ARCH

目標CPU平台的名字,如同在Android開放源碼中指定的那樣。如果是’arm’,表示要生成ARM兼容的指令,與CPU架構的修訂版無關

7.TARGET_PLATFORM

Android.mk解析的時候,目標Android平台的名字,例如:“android-3對應Android 1.5系統,現在只支持'android-1.5'

8.TARGET_ARCH_ABI

CPU+ABI的名字,只支持’arm’,它的含義是:ARMv5TE、armeabi-v7a或更高級CPU,並且具有'softfloat'浮點支持。

  其他的ABI將在以後的NDK版本中介紹,它們會有不同的名字。注意所有基於ARM的ABI都會把'TARGET_ARCH'定義成‘arm’,但是會有不同的‘TARGET_ARCH_ABI’

9.TARGET_ABI

 目標平台和abi的組合,它事實上被定義成$(TARGET_PLATFORM)-$(TARGET_ARCH_ABI)在你想要在真實的設備中針對一個特別的目標系統進行測試時,會有用。

在默認的情況下,它會是'android-1.5-arm'

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved