最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解安卓系統(tǒng)中的Android.mk文件

 更新時間:2015年07月31日 11:30:52   作者:低調小一  
這篇文章主要介紹了詳解安卓系統(tǒng)中的Android.mk文件,該文件用來告訴系統(tǒng)關于源代碼的編譯,需要的朋友可以參考下

概述
    Android.mk文件用來向編譯系統(tǒng)描述如何編譯你的源代碼。更確切地說,該文件其實就是一個小型的Makefile。由于該文件會被NDK的編譯工具解析多次,因此應該盡量減少源碼中聲明變量,因為這些變量可能會被多次定義從而影響到后面的解析。這個文件的語法允許把源代碼組織成模塊,每個模塊屬于下列類型之一:

    APK程序:一般的Android程序,編譯打包生成apk文件。
    JAVA庫:java類庫,編譯打包生成jar包文件。
    C\C++應用程序:可執(zhí)行的C/C++應用程序。
    C\C++靜態(tài)庫:編譯生產C/C++靜態(tài)庫,并打包成.a文件。
    C\C++共享庫:編譯生成共享庫,并打包成.so文件,有且只有共享庫才能被安裝/復制到APK包中。


舉例
    這里參考了網上一個通用的例子,編譯簡單的“Hello World”,來說明一下Android.mk編寫。例如下面的文件:
1. sources/test/hello.c
2. sources/test/Android.mk
    其中“hello.c”是一個JNI共享庫,實現(xiàn)返回“hello world”字符串的原生方法。因此,Android.mk文件內容如下:

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

    解釋一下這幾行代碼:
1. LOCAL_PATH := $(call my-dir) : 一個Android.mk文件首先必須定義好LOCAL_PATH變量,用于在開發(fā)樹中查找源文件。在這個例子中,宏函數(shù)my-dir由編譯系統(tǒng)提供,用于返回當前路徑(即包含Android.mk文件的目錄)。
2. include $(CLEAR_VARS):CLEAR_VARS由編譯i系統(tǒng)提供,指定讓GNU MAKEFILE清除除了LOCAL_PATH變量外的許多LOCAL_***變量(例如:LOCAL_MODULE、LOCAL_SRC_FILES等)。這是非常有必要的,因為所有的編譯文件都在同一個GUN MKAE執(zhí)行環(huán)境中,所有的變量都是全局變量,不清除容易引起解析錯誤。
3. LOCAL_MODULE := hello:LOCAL_MODULE變量必須定義,用來標識在Android.mk文件描述的每一個模塊。而且名稱必須是唯一的,并且不能包含空格。編譯系統(tǒng)會自動產生合適的前綴和后綴,比如一個被命名為hello的共享庫模塊,將會生成libhello.so文件。如果把庫命名為libhello,編譯系統(tǒng)將不會添加任何lib前綴,也會生成libhello.so文件。
4. LOCAL_SRC_FILES := hello.c:LOCAL_SRC_FILES變量必須包含將要編譯打包進模塊中的源代碼文件。
5. include $(BUILD_SHARED_LIBRARY):BUILD_SHARED_LIBRARY是編譯系統(tǒng)提供的變量,指向一個GNU Makefile腳本(應該就是build/core目錄下的shared_library.mk),負責收集自從上次調用include $(CLEAR_VARS)以來,定義在LOCAL_***變量中的所有信息,并且決定編譯什么,如何正確地去做,并根據(jù)其規(guī)則生成靜態(tài)庫。
6. 解釋一下Android.mk里變量定義字符":="。“:=”類似于c中的宏,即在定義處明確展開,完全進行文本替換。

模塊描述變量
     下面的變量用于向系統(tǒng)描述我們自己的模塊,它應該定義在include $(CLEAR_VARS)和include $(BUILD_***)之間。正如前面講述的那樣,$(CLEAR_VARS)是一個腳本,清除所有這些變量,除非在描述中顯示注明。
1. LOCAL_PATH:這個變量用于給出當前文件的路徑,必須在Android.mk的開頭定義,可以這樣使用:LOCAL_PATH := $(call my-dir),這樣這個變量不會被$(CLEAR_VARS)清除,因為每個Android.mk只需要定義一次(即使一個文件中定義了多個模塊的情況下)。
2. LOCAL_SRC_FILES:當前模塊包含的所有源代碼文件。
3. LOCAL_MODULE:當前模塊的名稱,這個名稱應當是唯一的,并且不能包含空格。模塊間的依賴關系就是通過這個名稱來引用的。
4. LOCAL_MODULE_CLASS:標識所編譯模塊最后放置的位置。ETC表示放置在/system/etc.目錄下,APPS表示放置在/system/app目錄下,SHARED_LIBRARIES表示放置在/system/lib目錄下。如果具體指定,則編譯的模塊不會放到編譯系統(tǒng)中,最后會在out對應product的obj目錄下的對應目錄中。
5. LOCAL_SRC_FILES:這是要編譯的源代碼文件列表。只要列出要傳遞給編譯器的文件即可,編譯系統(tǒng)會自動計算依賴關系。源代碼文件路徑都是相相對于LOCAL_PATH的,因此可以使用相對路徑進行描述。
6. LOCAL_JAVA_LIBRARIES:當前模塊依賴的Java共享庫,也叫Java動態(tài)庫。例如framework.jar包。
7. LOCAL_STATIC_JAVA_LIBRARIES:當前模塊依賴的Java靜態(tài)庫,在Android里,導入的jar包和引用的第三方工程都屬于Java靜態(tài)庫。
8. LOCAL_STATIC_LIBRARIES:當前模塊在運行時依賴的靜態(tài)庫的名稱。
9. LOCAL_SHARED_LIBRARIES:當前模塊在運行時依賴的動態(tài)庫的名稱。
10. LOCAL_C_INCLUDES:c或c++語言需要的頭文件的路徑。
11. LOCAL_CFLAGS:提供給C/C++編譯器的額外編譯參數(shù)。
12. LOCAL_PACKAGE_NAME:當前APK應用的名稱。
13. LOCAL_CERTIFICATE:簽署當前應用的證書名稱。
14. LOCAL_MODULE_TAGS:當前模塊所包含的標簽,一個模塊可以包含多個標簽。標簽的值可能是eng、user、debug、development、optional。其中,optional是默認標簽。
15. LOCAL_DEX_PREOPT:apk的odex優(yōu)化開關,默認是false。

    除此之外,Build系統(tǒng)中還定義了一些函數(shù)方便在Android.mk中使用,包括:
1. $(call my-dir):獲取當前文件夾的路徑。
2. $(call all-java-files-under, <src>):獲取指定目錄下的所有java文件。
3. $(call all-c-files-under, <src>):獲取指定目錄下的所有c文件。
4. $(call all-Iaidl-files-under, <src>):獲取指定目錄下的所有AIDL文件。
5. $(call all-makefiles-under, <folder>):獲取指定目錄下的所有Make文件。
6. $(call intermediates-dir-for, <class>, <app_name>, <host or target>, <common?>):獲取Build輸入的目標文件夾路徑。

相關文章

  • 用C++實現(xiàn)一個命令行進度條的示例代碼

    用C++實現(xiàn)一個命令行進度條的示例代碼

    這篇文章主要介紹了用C++實現(xiàn)一個命令行進度條的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • C語言計算日期差的方法示例

    C語言計算日期差的方法示例

    這篇文章主要介紹了C語言計算日期差的方法,結合具體實例形式分析了C語言針對日期轉換、運算等相關操作技巧,需要的朋友可以參考下
    2017-06-06
  • C語言中qsort函數(shù)的介紹與用法實例

    C語言中qsort函數(shù)的介紹與用法實例

    C語言的標準庫提供了一個重要的排序函數(shù)qsort給C語言使用者使用,qsort函數(shù)將快速排序的算法封裝起來,這篇文章主要給大家介紹了關于C語言中qsort函數(shù)的介紹與用法的相關資料,需要的朋友可以參考下
    2021-09-09
  • 基于select、poll、epoll的區(qū)別詳解

    基于select、poll、epoll的區(qū)別詳解

    本篇文章是對select、poll、epoll之間的區(qū)別進行了詳細的分析介紹。需要的朋友參考下
    2013-05-05
  • AVX2指令集優(yōu)化整形數(shù)組求和算法

    AVX2指令集優(yōu)化整形數(shù)組求和算法

    這篇文章主要為大家介紹了AVX2指令集優(yōu)化整形數(shù)組求和算法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • C++ 中靜態(tài)成員函數(shù)與非靜態(tài)成員函數(shù)的區(qū)別

    C++ 中靜態(tài)成員函數(shù)與非靜態(tài)成員函數(shù)的區(qū)別

    這篇文章主要介紹了C++ 中靜態(tài)成員函數(shù)與非靜態(tài)成員函數(shù)的區(qū)別的相關資料,需要的朋友可以參考下
    2017-05-05
  • C語言二叉樹的非遞歸遍歷實例分析

    C語言二叉樹的非遞歸遍歷實例分析

    這篇文章主要介紹了C語言二叉樹的非遞歸遍歷,包括了先序遍歷、中序遍歷與后序遍歷,需要的朋友可以參考下
    2014-09-09
  • C/C++實現(xiàn)捕獲所有信號的示例詳解

    C/C++實現(xiàn)捕獲所有信號的示例詳解

    Linux的信號機制大部分情況下用不到,但是由于大部分信號的默認處理是終止進程,不正確處理會惹麻煩,所以我們來看看如何使用C/C++實現(xiàn)捕獲所有信號吧
    2024-03-03
  • C語言全面梳理結構體知識點

    C語言全面梳理結構體知識點

    結構體是一些值的集合,這些值稱為成員變量,結構體的每個成員可以是不同類型的變量。本文將通過示例為大家詳細講講C語言中結構體的使用,需要的可以參考一下
    2022-07-07
  • 使用C語言繪制統(tǒng)計圖中的餅圖

    使用C語言繪制統(tǒng)計圖中的餅圖

    常用的統(tǒng)計圖有條形圖、柱形圖、折線圖、曲線圖、餅圖、環(huán)形圖、扇形圖,本文主要為大家詳細介紹了如何使用使用C語言繪制統(tǒng)計圖中的餅圖,希望對大家有所幫助
    2024-02-02

最新評論

绍兴市| 房产| 文水县| 资兴市| 库伦旗| 延长县| 宣汉县| 灌云县| 汉中市| 新建县| 新和县| 都昌县| 元江| 灵宝市| 克拉玛依市| 特克斯县| 甘洛县| 微博| 蚌埠市| 永靖县| 澄迈县| 房山区| 桦川县| 阳江市| 平谷区| 宁化县| 肇庆市| 比如县| 藁城市| 东丽区| 峨山| 紫云| 恭城| 丰宁| 前郭尔| 体育| 临夏市| 洛扎县| 云安县| 罗田县| 双牌县|