一、應用程序構建文件:application.mk
Android應用程序的構建文件是Makefile文件,並且它的主要部分被定義在application.mk文件中。該文件的主要目的是使Android的make系統知道apk中包含哪些文件,以及如何使用和鏈接它們。application.mk文件還控制構建Android應用程序時所用的其他一些參數。
二、使用application.mk定義目標架構
構建Android應用程序時,您可能需要在多個目標架構(如ARM和x86)的不同二進位文件中使用不同的代碼(如庫)。application.mk文件定義了該應用程序支持的目標架構。
APP_ABI := armeabi armeabi-v7a x86
默認情況下,該值包含所有ABI。要限制特定ABI,請覆蓋此變數。請注意,對於針對其中一個或多個ABI的應用程序,應將其編譯為庫項目,而應用程序的源代碼可以通過公共庫APIs進行訪問。
三、使用application.mk定義使用的C++運行時庫
Android支持三種不同的C++運行時庫:stlport、gnustl和libc++。請在Make文件中使用APP_STL變數來描述應用程序鏈接的運行時庫。將APP_STL設置為以下(在本地模塊的application.mk中設置)之一,即可指定舊版STL庫:
APP_STL := stlport_static APP_STL := stlport_shared APP_STL := gnustl_static APP_STL := gnustl_shared
但Android NDK 18或更高版本已刪除對STLPort和Gnustl的支持,以支持libstdc++和libc++。要使用libc++運行時庫,請將您的application.mk設置為:
APP_STL := c++_static APP_STL := c++_shared
四、使用application.mk定義應用程序的架構特定選項
如上所述,應用程序使用Android NDK構建。在應用程序編譯期間,需要設置特定於架構的標誌。這通常包括調試和優化等。
APP_CFLAGS := -DDEBUG
APP_CFLAGS 定義了特定於應用程序的C選項。 它們與Make工具一起使用,用於編譯特定於應用程序的源文件。 要集中處理調試選項或特定於目標架構的選項,請使用APP_CPPFLAGS 、APP_CXXFLAGS或APP_LDFLAGS 。
五、使用application.mk定義應用程序使用的嵌入式庫
Android應用程序可以使用來自系統或其他應用程序的預編譯庫,或者可以構建自己的庫作為應用程序的一部分。在application.mk文件中使用LOCAL_SHARED_LIBRARIES將庫添加到應用程序中。將應用程序源代碼中的鏈接指令與預構建的共享庫符號匹配,而不是構建自己的庫。
LOCAL_SHARED_LIBRARIES := libmy_shared_library
默認情況下,這些庫將使用系統共享庫路徑進行鏈接。如果將LOCAL_ALLOW_UNDEFINED_SYMBOLS 值設置為true ,則會在允許庫中未定義的符號的情況下構建應用程序。
六、總結
application.mk文件是Android應用程序構建文件中一個重要的文件,它定義應用程序的目標架構、C++運行時庫、應用程序的架構特定選項以及應用程序使用的嵌入式庫。熟練理解和使用application.mk文件可以幫助您優化和管理Android應用程序的構建過程。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/252044.html