範例
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_STATIC_JAVA_LIBRARIES := libacerutilityservice
LOCAL_PACKAGE_NAME := cameraTest
LOCAL_CERTIFICATE := platform
include $(BUILD_SHARED_LIBRARY)
##################################################
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libacerutilityservice:classes.jar
include $(BUILD_MULTI_PREBUILT)
:= 為指定值;+=是追加值(同java語法)
1 首先需要指定LOCAL_PATH變數,用於查找原始檔案位置
LOCAL_PATH:= $(call my-dir)
通常Android.mk的位置要和需要編譯的程式放在同一個目錄下,所以會有以下型式上述語句說明,將LOCAL_PATH變數定義成本檔(Android.mk)所在目錄路徑。
2 Android.mk會有很多個編譯模組,每個模組皆是以include $(CLEAR_VARS)開始,include $(BUILD_XXX)結束
include $(CLEAR_VARS)
…
include $(BUILD_PACKAGE)
l include $(CLEAR_VARS)
CLEAR_VARS由系統提供之變數,所有編譯的控制文件都必須在同一個GNU MARKE底下,皆是全域變數。所以此行可讓GNU MAKEFILE為你清除除LOCAL_PATH以外的所有LOCAL_XXX變數。
例如:LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES
l include $(BUILD_XXX)
BUILD_XXX,XXX的部份可自由命名,即為以模組之名稱,但也有固定的用法,上述範例就是採用BUILD_SHARED_LIBRARY。
i. include $(BUILD_STATIC_LIBRARY)表示編譯成靜態庫
ii. include $(BUILD_SHARED_LIBRARY)表示編譯成動態庫
iii. include $(BUILD_EXECUTABLE)表示編譯成可執行程式
3 其它變數設定
l LOCAL_MODULE
LOCAL_MODULE := helloworld
為每一個模組的名稱,必需為一且不能有空格,例如一個稱為foo的模組,將會產生出libfoo.so的文件(固定為libxxx.so)
l LOCAL_SRC_FILES
LOCAL_SRC_FILES := $(call all-java-files-under, src)
要進行編譯的原始程式碼位置,上例表示當下位置的src資料夾裡
l LOCAL_STATIC_JAVA_LIBRARIES
LOCAL_STATIC_JAVA_LIBRARIES := libacerutilityservice
…
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libacerutilityservice:classes.jar
編譯帶有第三方jar檔的app,後面的變數名稱可隨意取,只要前後相同即可,最後面的classes.jar則是要匯入的jar檔名稱
l LOCAL_PACKAGE_NAME
產生出apk的檔案名稱
l LOCAL_CERTIFICATE
LOCAL_CERTIFICATE := platform
設定簽名(sign),有四種預設簽名可用
i. 1、testkey:普通APK,預設情況下使用。
ii. 2、platform:該APK完成一些系統的核心功能。經過對系統中存在的資料夾的訪問測試,這種方式編譯出來的APK所在進程的UID為system。
iii. 3、shared:該APK需要和home/contacts進程共用資料。
iv. 4、media:該APK是media/download系統中的一環。
參考來源: http://blog.csdn.net/zhandoushi1982/article/details/5316669
留言列表