Android NDK開發指南(一) Application.mk文件


Application.mk文件

 

Application.mk目的是描述在你的應用程序中所需要的模塊(即靜態庫或動態庫)。
Application.mk文件通常被放置在 $PROJECT/jni/Application.mk下,$PROJECT指的是您的項目。

 

簡介:
-----------------------------
要將C\C++代碼編譯為SO文件,光有Android.mk文件還不行,還需要一個Application.mk文件。

本文檔是描述你的Android應用程序中需要的本地模塊的Application.mk的語法使用。

1.  APP_PROJECT_PATH  : 這個變量是強制性的,並且會給出應用程序工程的根目錄的一個絕對路徑。

                                                  這是用來復制或者安裝一個沒有任何版本限制的JNI庫,從而給APK生成工具一個詳細的路徑。

 

2. APP_MODULES  :   這個變量是可選的,如果沒有定義,這個模塊名字被定義在Android.mk文件中的 LOCAL_MODULE 中。

                                        NDK將由在Android.mk中聲明的默認的模塊編譯,並且包含所有的子文件(makefile文), NDK會自動計算模塊的依賴。

                                        如果APP_MODULES定義了,它必須是一個空格分隔的模塊列表

                                        ( 注意:NDK在R4開始改變了這個變量的行為,在此之前: 在Application.mk中,該變量是強制的必須明確列出所有需要的模塊)

 

 3. APP_OPTIM :   這個變量是可選的,用來定義“release”或"debug"。在編譯您的應用程序模塊的時候,可以用來改變優先級。
                                “release”模式是默認的,並且會生成高度優化的二進制代碼。

                                  "debug"模式生成的是未優化的二進制代碼,但可以檢測出很多的BUG,可以用於調試。

                                  注意:如果你的應用程序是可調試的(即,如果你的清單文件在它的<application>標簽中把android:debuggable屬性設為true),

                                             默認將是debug而非release。把APP_OPTIM設置為release可以覆寫它。

                                  注意:可以調試release和debug版二進制,但release版構建傾向於在調試會話中提供較少信息:一些變量被優化並且不能被檢測,

                                              代碼重新排序可能致使代碼步進變得困難,堆棧跟蹤可能不可靠,等等。

 

4. APP_CFLAGS : 一個C編譯器開關集合,在編譯任意模塊的任意C或C++源代碼時傳遞。

                                   它可以用於改變一個給定的應用程序需要依賴的模塊的構建,而不是修改它自身的Android.mk文件

 

 

5. APP_BUILD_SCRIPT : 默認,NDK構建系統將在 $(APP_PROJECT_PATH)/jni 下尋找一個名為 Android.mk 的文件。即,對於這個文件

                                                 $(APP_PROJECT_PATH)/jni/Android.mk

                                                 如果你想重載這個行為,你可以定義APP_BUILD_SCRIPT指向一個不同的構建腳本。

                                                 一個非絕對路徑將總是被解析為相對於NDK頂級目錄的路徑。

 

 

6. APP_ABI : 默認情況下,NDK的編譯系統根據 "armeabi" ABI生成機器代碼。可以使用APP_ABI 來選擇一個不同的ABI。

                          比如:為了在ARMv7的設備上支持硬件FPU指令。可以使用  APP_ABI := armeabi-v7a

                                      或者為了支持IA-32指令集,可以使用      APP_ABI := x86

                                      或者為了同時支持這三種,可以使用       APP_ABI := armeabi armeabi-v7a x86

 

 

 

7. APP_STL :默認,NDK構建系統提供由Android系統給出的最小C++運行時庫(/system/lib/libstdc++.so)的C++頭文件。
                         然而,NDK帶有另一個C++實現,你可以在你自己的應用程序中使用或鏈接它。

                        定義APP_STL以選擇它們其中的一個:  APP_STL := stlport_static       -->     static STLport library
                                                                                           APP_STL := stlport_shared    -->     shared STLport library
                                                                                           APP_STL := system               -->      default C++ runtime library

 

 

參考:   http://hualang.iteye.com/blog/1149359


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM