編輯:關於Android編程
Android.mk文件簡單分析
一個Android.mk文件用來向編譯系統描述需要編譯的源代碼。具體來說:該文件是GNUMakefile的一小部分,會被編譯系統解析一次或多次。可以在每一個Android.mk中定義一個或多個模塊,也可以在幾個模塊中使用同一個源代碼文件。
每個模塊屬下列類型之一:
1)APK程序,一般的Android程序,編譯打包生成apk文件
2)JAVA庫,java類庫,編譯打包生成jar文件
3) CC++應用程序,可執行的CC++應用程序
4)CC++靜態庫,編譯生成CC++靜態庫,並打包成.a文件
5)CC++共享庫, 編譯生成共享庫(動態鏈接庫),並打包成.so, 有且只有共享庫才能被安裝/復制到應用軟件(APK)包中。
一個簡單的例子
一個簡單的hello world,比如下面的文件:
相應的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:映象生成目錄
隨著6月份google的Android N preview 4版本的發布,筆者也借著東風在N6P上體驗了一把新系統,試玩之後認為有幾點新的感受特記錄之。1.分屏多任務進入
在做android UI布局時,用了LinearLayout嵌套,發現效果並不如我預料一般查了下資料,說是要設置layout_weight屬性資料說得不是很清
引言Android L之前,很多時候我們在使用EditText輸入時,希望給及時糾正用戶錯誤的格式輸入,常常會監聽一些事件,然後給出一些提示語言,而顯示提示語言的有可能是
本文給大家介紹在Android中如何實現頂部導航菜單左右滑動效果,具體內容如下第一種解決方案: 實現原理是使用android-support-v4.jar包中ViewPa