Android編譯系統(tǒng)-完結(jié)

這個(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é)了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,269評(píng)論 25 708
  • Android游戲開發(fā)實(shí)踐(1)之NDK與JNI開發(fā)02 承接上篇Android游戲開發(fā)實(shí)踐(1)之NDK與JNI...
    AlphaGL閱讀 3,780評(píng)論 0 24
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評(píng)論 18 139
  • 入冬后,天一下子冷了下來,忙碌了一天的工作,歸家后脫下厚重的外套,卸下一天的壓力和煩惱來份暖暖的皮蛋瘦肉粥吧,入口...
    kiki的二次元口袋閱讀 247評(píng)論 0 0
  • 湘江邊上,岳麓山腳。看那橘子紅,在洲頭。望月湖望到湘江水,滾滾而流。我采擷一片夕陽(yáng),紅光影影綽綽。 朝陽(yáng)東升,落日...
    曲無(wú)由閱讀 1,128評(píng)論 3 7