這個(gè)給大家總結(jié)一下常用的Android.mk的寫法。
預(yù)裝app
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := Chico
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_SRC_FILES := $(LOCAL_MODULE)$(LOCAL_MODULE_SUFFIX)
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_OVERRIDES_PACKAGES := OldOne
LOCAL_PRIVILEGED_MODULE := true
LOCAL_REQUIRED_MODULES := chicolib2nd
LOCAL_PREBUILT_JNI_LIBS := @lib/arm/chicolib.so
LOCAL_MODULE_PATH := $(TARGET_OUT_APPS)
include $(BUILD_PREBUILT)
預(yù)裝一個(gè)app,必須要指定五部分:
-
LOCAL_MODULE
(模塊名,并且這個(gè)名字要加入到PRODUCT_PACKAGES中) -
LOCAL_MODULE_FILES
(模塊的源文件) -
LOCAL_MODULE_CLASS
(在采用預(yù)裝這種形式的時(shí)候,該變量來指定預(yù)裝的模塊的類型,此處為APPS) -
LOCAL_MODULE_PATH
(用來指定模塊的輸出路徑,此處我們指定輸出到out/app下) -
LOCAL_MODULE_TAGS
(用來指定該app在編譯什么樣子的版本的時(shí)候會(huì)被安裝到機(jī)器上)
在說一下其他的LOCAL變量
-
LOCAL_OVERRIDES_PACKAGES
(用來指定在編譯該模塊的時(shí)候就不需要編譯OldOne這個(gè)模塊) -
LOCAL_PRIVILEGED_MODULE
用來設(shè)置該app是否要安裝到priv-app下 -
LOCAL_REQUIRED_MODULES
編譯該模塊需要依賴的模塊名,在編譯該模塊的時(shí)候會(huì)先編譯所依賴的模塊 -
LOCAL_PREBUILD_JNI_LIBS
當(dāng)該app包含so庫(kù)的時(shí)候,從app中提取該so庫(kù),并放置到指定的目錄下 -
LOCAL_MODULE_SUFFIX
該模塊的后綴,在預(yù)裝app的時(shí)候?yàn)?app
預(yù)裝so庫(kù)
include $(CLEAR_VARS)
LOCAL_MODULE := libchico
LOCAL_SRC_FILES := $(LOCAL_MODULE).so
LOCAL_MODULE_STEM := $(LOCAL_MODULE)
LOCAL_MODULE_SUFFIX := $(suffix $(LOCAL_SRC_FILES))
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)
include $(BUILD_PREBUILT)
預(yù)裝可執(zhí)行文件
include $(CLEAR_VARS)
LOCAL_MODULE := chico
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE)
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
LOCAL_UNSTRIPPED_PATH := $(LOCAL_MODULE_PATH)
LOCAL_POST_INSTALL_CMD := \
chmod 6755 $(LOCAL_MODULE_PATH)/$(LOCAL_MODULE)
include $(BUILD_PREBUILT)
在預(yù)裝可執(zhí)行文件的時(shí)候,我們可以通過LOCAL_POST_INSTALL_CMD
在該可執(zhí)行文件被復(fù)制到目標(biāo)目錄的時(shí)候更改其權(quán)限
預(yù)裝配置文件
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := chico.conf
LOCAL_SRC_FILES := $(LOCAL_MODULE)
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)
include $(BUILD_PREBUILT)
預(yù)裝Jar包
include $(CLEAR_VARS)
LOCAL_MODULE := chico.jar
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
# This will install the file in /system/framework
LOCAL_MODULE_PATH := $(TARGET_OUT_JAVA_LIBRARIES)
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)
該jar包被預(yù)裝到了system/framework下
這是我們平時(shí)常用的預(yù)裝Binary的方法。
對(duì)于apk開發(fā),我們常用的集成jar包和so庫(kù)的方法有一點(diǎn)不同。假設(shè)我們要在Chico.apk中集成chico.jar和libchico.so這樣兩個(gè)binary,它們都放在libs文件夾下
LOCAL_PATH=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_PACKAGE_NAME := Chico
LOCAL_SRC_FILES := $(call all-java-files-under,src)
LOCAL_STATIC_JAVA_LIBRARIES := chico
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGES)
###############################
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := chico:libs/chico.jar
LOCAL_PREBUILT_LIBS := libchico:libs/libchico.so
include $(BUILD_MULTI_PREBUILT)
我們?cè)诙xjar包和so庫(kù)的時(shí)候,采用了 別名:路徑名
的方法,其實(shí)我們也可以不采用這種辦法,比如定義jar包的時(shí)候
LOCAL_STATIC_JAVA_LIBRARIES := libs/chico.jar
在編譯該jar包的時(shí)候
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES = libs/chico.jar
這樣做也是可以的。
好了,Android編譯系統(tǒng)就完結(jié)了。