|
下面是main.mk文件包含關(guān)系,本文檔主要說(shuō)明的就是這些文件里到底做了什么。(這個(gè)文件被根目錄下的makefile文件包含)
一. main.mk 1.檢查版本號(hào),設(shè)置環(huán)境變量(BUILD_SYSTEM)和缺省的目標(biāo)。$(MAKE_VERSION) >= 3.81,BUILD_SYSTEM= build/core 2.包含文件BUILD_SYSTEM/config.mk。根據(jù)配置信息和主機(jī)目標(biāo)機(jī)信息,設(shè)置一些變量。 3.包含文件BUILD_SYSTEM/cleanbuild.mk。如果當(dāng)前配置改變,強(qiáng)制刪除上次的編譯結(jié)果 4.包含文件OUT_DIR/version_check.mk。就設(shè)置了VERSIONS_CHECKED。如果版本序號(hào)改變,即VERSION_CHECK_SEQUENCE_NUMBER?。絍ERSIONS_CHECKED,檢查文件系統(tǒng)是否大小寫不敏感。文件路徑上是否沒有空格。JAVA,JAVAC的版本是否是1.6。 5.包含文件BUILD_SYSTEM/definitions.mk。定義了很多函數(shù)供makefile文件系統(tǒng)使用。 主要的是transform-xxx-to-xxx的形式,比如transform-cpp-to-o。并定義了一個(gè)make目標(biāo)dist,額外的拷貝一些重要的文件到目標(biāo)文件夾。 6.檢查MAKECMDGOALS和TARGE_BUILD_VARIANT.根據(jù)MAKECMDGOALS設(shè)置標(biāo)量is_sdk_build,是否編譯SDK。 7.根據(jù)TARGE_BUILD_VARIANT,設(shè)置tags_to_install,ADDITIONAL_DEFAULT_PROPERTIES
8.檢查PARDUCT_TAG是否包含dalvik.gc.type-precise,如果包含設(shè)置ADDITIONAL_DEFAULT_PROPERTIES+=dalvik.vm.dexopt-flags=m=y 9.判斷PRODUCT_COPY_FILES。為空就安裝apns-conf.xml文件 PRODUCT_COPY_FILE=development/data/etc/apns-conf_sdk.xml:system/etc/apns-conf.xml 如果TARGE_BUILD_VARIANT包含eng,tests但不包含sdk,且vendor/google/etc/apns-conf.xml文件存在,則PRODUCT_COPY_FILE=vendor/google/etc/apns-conf.xml:system/etc/apns-conf.xml 10.設(shè)置ADDITIONAL_BUILD_PROPERTIES+= net.bt.name=Android dalvik.vm.stack-trace-file=/data/anr/traces.txt 11.如果MAKECMDGOALS僅包含showcommands或checkbuild,設(shè)置make目標(biāo)為DEFAULT_GOALS 12.如果MAKECMDGOALS不包含clean,clobber,dataclean,installclean,根據(jù)不同的主機(jī)平臺(tái)和處理器品平臺(tái),包含進(jìn)要編譯的模塊,設(shè)置subdirs。 13.通過build/tools/findleaves.py,把subdirs目錄下的Android.mk存在subdirs_makefiles。并包含這些文件。如果使用mm命令,只包含當(dāng)前目錄下的Android.mk。 14.若是全部編譯,包含frameworks/policies/base/PolicyConfig.mk。生成android.policy模塊,并定義了自己的make刪除操作policy_installclean。 15.根據(jù)tags_to_install和is_sdk_build,設(shè)置哪些模塊需要安裝,并存入modules_to_install. 這里主要有兩個(gè)函數(shù)要說(shuō)明一下: get-tagged-modules $1 $2 這兩個(gè)參數(shù)一般都是ALL_MODULE_TAGS=debug eng gnuoptional samples testsuser里面的值,取得$1中不包括$2的列表,比如tests user,返回$(ALL_MODULE_TAGS.user)$(ALL_MODULE_TAGS.tests)即帶有user或tests標(biāo)記模塊的目標(biāo)文件路徑列表。 Module-installed-files $1 $1一般的是一個(gè)短的模塊名,比如framework,Browers,返回這個(gè)模塊的目標(biāo)文件路徑 16.包含:$(BUILD_SYSTEM)/Makefile。主要是定義了一些偽目標(biāo)。 17.定義modules_to_check,文件路徑列表,若模塊沒有定義LOCAL_DONT_CHECK_MODULE,會(huì)把生成目標(biāo)的規(guī)則加入到這個(gè)變量,以便在modules_to_install后檢查目標(biāo)是否生成成功,目標(biāo)不存在的話再次生成目標(biāo)。 18.定義一些make target
二. config.mk 1.設(shè)置一些原文件路徑,以SRC_開頭 2.包含文件$(BUILD_SYSTEM)/pathmap.mk,定義了一些短名到長(zhǎng)路徑名的影射, 存放在pathmap_INCL,通過include-path-for $1 根據(jù)短名獲取到長(zhǎng)路徑名FRAMEWORKS_BASE_JAVA_SRC_DIRS 保存了所有要編進(jìn)Android.jar的framework/base下的文件路徑。 3.設(shè)置編譯目標(biāo),.jar,.bin,.so,.a,.apk,...。以BUILD_開頭,指向具體的mk文件。比如BUILD_STATIC_LIBRARY:= $(BUILD_SYSTEM)/static_library.mk 4.設(shè)置一般編譯選項(xiàng)和不同類型的文件后綴名。以COMMON_開頭。COMMON_GLOBAL_CFLAGS,COMMON_RELEASE_CFLAGS。COMMON_PACKAGE_SUFFIX:=.zip 5.包含include$(TOPDIR)buildspec.mk。設(shè)置一些主要的變量,比如目標(biāo)產(chǎn)品名稱。這些都要我們?cè)趍ake之前設(shè)置。這個(gè)文件有個(gè)模版是build/buildspec.mk.default。 6.包含include$(BUILD_SYSTEM)/envsetup.mk。設(shè)置一些跟product相關(guān)的變量。 7.在build/target/board/$(TARGET_DEVICE)/BroadConfig.mk,device/*/$(TARGET_DEVICE)/BroadConfig.mk veror/*/$(TARGET_DEVICE)/BroadConfig.mk 這三個(gè)路徑下,查找product的目標(biāo)設(shè)備的BroadConfig.mk文件。并包含進(jìn)來(lái)。BroadConfig.mk設(shè)置了每個(gè)設(shè)備的自己的一些變量值,來(lái)區(qū)別編譯時(shí)的行為。TARGET_CPU_ABI 必須要設(shè)置。這些設(shè)備是被product.mk中 TARGET_DEVICE指定,一個(gè)設(shè)備信息可以被很多個(gè)product使用。 8.設(shè)置combo_target := HOST_,包含include $(BUILD_SYSTEM)/combo/select.mk。 根據(jù)操作系統(tǒng)和CPU類型設(shè)置以HOST_開頭的變量,并包含include$(BUILD_SYSTEM)/combo/HOST_$(HOST_OS)_$(HOST_ARCH).mk,其中HOST_OS是主機(jī)操作系統(tǒng),HOST_ARCH是主機(jī)CPU類型,比如HOST_linux_x86.mk.在這個(gè)文件里修改以HOST_開頭的變量,主要是向HOST_GLOBAL_CFLAGS添加標(biāo)志。 9.設(shè)置combo_target := TARGET_,包含include $(BUILD_SYSTEM)/combo/select.mk。 根據(jù)操作系統(tǒng)和CPU類型設(shè)置以TARGET_開頭的變量,并包含include$(BUILD_SYSTEM)/combo/TARGET_$(TARGET_OS)_$(TARGET_ARCH).mk,其中TARGET_OS是目標(biāo)操作系統(tǒng),TARGET_ARCH是目標(biāo)CPU類型,比如TARGET_linux_arm.mk.在這個(gè)文件里修改以TARGET_開頭的變量,主要是設(shè)置交叉編譯工具和參數(shù)和基本的系統(tǒng)頭文件。定義了transform-o-to-shared-lib-inner,transform-o-to-executable-inner,transform-o-to-static-executable-inner三個(gè)函數(shù),把.o文件分別轉(zhuǎn)化成共享庫(kù)文件,可執(zhí)行文件,靜態(tài)庫(kù)文件。 10.包含 include$(BUILD_SYSTEM)/combo/javac.mk。得到一個(gè)JAVAC編譯器
11.檢查BUILD_ENV_SEQUENCE_NUMBER,這個(gè)是在前面的buildspec.mk設(shè)置或者通過envsetup.sh腳本設(shè)置。 12.設(shè)置主機(jī)通用工具變量。其中一些是主機(jī)自帶的LEX:= flex YACC:=bison -d DOXYGEN:= doxygen,還有一些是在/out/target/$($(HOST_OS)-$(HOST_ARCH))/bin下的程序,MKBOOTIMG:=$(HOST_OUT_EXECUTABLES)/mkbootimg。 13.設(shè)置最終的編譯連接參數(shù)。有如下參數(shù)變量: HOST_GLOBAL_CFLAGS, HOST_RELEASE_CFLAGS, HOST_GLOBAL_CPPFLAGS, HOST_RELEASE_CPPFLAGS, TARGET_GLOBAL_CFLAGS, TARGET_RELEASE_CFLAGS, TARGET_GLOBAL_CPPFLAGS,TARGET_RELEASE_CPPFLAGS, HOST_GLOBAL_LD_DIRS, TARGET_GLOBAL_LD_DIRS, HOST_PROJECT_INCLUDES, TARGET_PROJECT_INCLUDES, 13.獲得sdk和ndk的版本號(hào)列表。TARGET_AVAILABLE_SDK_VERSIONS和TARGET_AVAILABLE_NDK_VERSIONS
三. envsetup.mk 1.包含:include$(BUILD_SYSTEM)/version_defaults.mk 設(shè)置那些我們需要設(shè)置的變量的缺省值。這個(gè)文件我們不因該改動(dòng),改動(dòng)應(yīng)該在build_id.mk里。
2.設(shè)置在文件buildspec.mk里或通過envsetup.sh設(shè)置的變量的缺省值。
3.包含:include$(BUILD_SYSTEM)/product_config.mk。定義了兩種MAKECMDGOALS參數(shù)形式,根據(jù)product和device目錄下的mk文件生成相應(yīng)的PRODUCTS_xxx_xxx和DEVICES_xxx_xxx變量。中間的是文件的路徑,后面的是文件里定義的變量。 4.設(shè)置一些列路徑變量。主機(jī)路徑以HOST_OUT_* 或HOST_*_OUT_*形式,目標(biāo)機(jī)路徑以TARGET_OUT_* 或TARGET_*_OUT_*形式。 5.根據(jù)MAKECMDGOALS,若其中包含dumpvar-%或dumpvar-abs-%,就生成一個(gè)以dumpvar-%或dumpvar-abs-%命名的make目標(biāo)。實(shí)現(xiàn)是打印出%所表示的變量的值。這個(gè)變量必須要在這之前已經(jīng)定義了,后一種在前面還打印出當(dāng)前的路徑。這兩種情況必須要先設(shè)置CALLED_FROM_SETUP=true。envsetup.sh的get_build_var和get_abs_build_var()函數(shù)就是運(yùn)用的這個(gè)原理打印變量的值。
四. product_config.mk 1.定義兩種命令形式: makePRODUCT-<prodname>-<goal> TARGET_PRODUCT := prodname TARGET_BUILD_VARIANT := goal make APP-<appnames> TARGET_BUILD_APPS := appnames 2.包含:include$(BUILD_SYSTEM)/node_fns.mk include $(BUILD_SYSTEM)/product.mk include $(BUILD_SYSTEM)/device.mk 這三個(gè)文件主要是定義了一些函數(shù)來(lái)相互調(diào)用或供product_config.mk文件調(diào)用
3.調(diào)用import-products函數(shù),判斷TARGET_BUILD_APPS是否為空,若為空,只導(dǎo)入 $(SRC_TARGET_DIR)/product/AndroidProducts.mk里的mk文件。否則調(diào)用get-all-product-makefiles,導(dǎo)入全部mk文件。再調(diào)用check-all-products檢查變量設(shè)置的正確性。 4.根據(jù)要編譯的目標(biāo)TARGET_PRODUCT,通過調(diào)用resolve-short-product-name得到mk文件,結(jié)果存放在INTERNAL_PRODUCT變量里。再將PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_xxx的值賦值給PRODUCT_xxx。ADDITIONAL_BUILD_PROPERTIES追加PRODUCT_PROPERTY_OVERRIDES。這些PRODUCT_變量都在product下的mk文件里定義。如下: TARGET_DEVICE,PRODUCT_LOCALES ,PRODUCT_BRAND, PRODUCT_MODEL, PRODUCT_MANUFACTURER, PRODUCT_DEFAULT_WIFI_CHANNELS, PRODUCT_POLICY,PRODUCT_COPY_FILES, PRODUCT_PROPERTY_OVERRIDES, PRODUCT_PACKAGE_OVERLAYS, DEVICE_PACKAGE_OVERLAYS, PRODUCT_TAGS,PRODUCT_OTA_PUBLIC_KEYS
五. cleanbuild.mk 1. 定義了add-clean-step函數(shù)。有一個(gè)入口參數(shù)$(1),執(zhí)行刪除操作的具體shell命令。 第二部分是$(INTERNAL_CLEAN_BUILD_VERSION),默認(rèn)是4。 第三部分是有'@'組成,cleanspec.mk中的第幾個(gè)add- clean-step就用幾個(gè)@。
INTERNAL_STEP.packages_apps_Camera_CleanSpec-mk_acs4@:= rm -rf $(PRODUCT_OUT)/obj/APPS/Camera* INTERNAL_CLEAN_STEPS+=packages_apps_Camera_CleanSpec-mk_acs4@: INTERNAL_CLEAN_STEPS+packages_apps_Camera_CleanSpec-mk_acs4@@: 2.包含:$(BUILD_SYSTEM)/cleanspec.mk。設(shè)置INTERNAL_CLEAN_BUILD_VERSION :=3,并通過add-clean-step函數(shù),加進(jìn)一些默認(rèn)的刪除操作,在通過build/tools/findleaves.py枚舉所有的CleanSpec.mk文件,并把它們包含進(jìn)來(lái)。在這些文件里根據(jù)具體的模塊加刪除操作。 3.包含:$(PRODUCT_OUT)/clean_steps.mk。這個(gè)文件是自動(dòng)生成的,設(shè)置CURRENT_CLEAN_BUILD_VERSION :=INTERNAL_CLEAN_BUILD_VERSION 4.比較CURRENT_CLEAN_BUILD_VERSION和INTERNAL_CLEAN_BUILD_VERSION若相等執(zhí)行INTERNAL_CLEAN_STEPS里的命令,否則表示我們修改過cleanspec.mk, 刪除整個(gè)$(OUT_DIR)。 5.包含:$(PRODUCT_OUT)/previous_build_config.mk。這個(gè)文件也是自動(dòng)生成的,查看PREVIOUS_BUILD_CONFIG是否于當(dāng)前的編譯選項(xiàng)一致。不相同就強(qiáng)制刪除中間文件,并將當(dāng)前的編譯選項(xiàng)寫入文件。刪除的文件是由installclean_files,dataclean_files定義。PREVIOUS_BUILD_CONFIG的格式是$(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT)$(building_sdk)-{$(locale_list)}。 6.定義兩個(gè)make目標(biāo)installclean和dataclean。分別用來(lái)刪除安裝文件和數(shù)據(jù)文件。
六. Makefile 1.生成一些記錄文件 (1).生成$(OUT_DOCS)/index.html文件,將frameworks/base/docs/docs-redirect-index.html文件內(nèi)容拷貝進(jìn)去。 (2).生成$(TARGET_ROOT_OUT)/default.prop文件,將ADDITIONAL_DEFAULT_PROPERTIES的值寫入文件。生成$(TARGET_OUT)/build.prop文 件,主要存放的是build.properties,主要來(lái)自于三個(gè)方面(1,通過執(zhí)行build/tools/buildinfo.sh根據(jù)PRODUCT_NAME變量值...獲得2.文件$(TARGET_DEVICE_DIR)/system.prop3.ADDITIONAL_BUILD_PROPERTIES變量值)。 (3).生成文件$(PRODUCT_OUT)/sdk/sdk-build.prop,拷貝$(TARGET_OUT)/build.prop內(nèi)容,并修改sdk_build_prop_remove定義的屬性列表值都為generic。 (4).生成文件$(PRODUCT_OUT)/module-info.txt,列出全部模塊的信息,需聲明CREATE_MODULE_INFO_FILE。 2.定義一些make target 3.包含$(BUILD_SYSTEM)/tasks目錄下的所有.mk文件。 七. 模塊下的Android.mk的說(shuō)明 以camera為例:
1. include $(CLEAR_VARS) 這一步一般都要在文件頭部包含。CLEAR_VARS=build/core/clear_vars.mk,在這個(gè)文件里將所有以LOCAL_開頭的變量置為空,除了LOCAL_PATH.因?yàn)槊總€(gè)??於脊猛粋€(gè)LOCAL_變量,防止干擾。 2. LOCAL_PATH:=$(call my-dir) 通過調(diào)用my-dir函數(shù)獲得當(dāng)前目錄。 3. 設(shè)置以LOCAL_開頭的變量 LOCAL_SRC_FILES 需要的源文件,不需要包含它的依賴文件,因?yàn)榫幾g時(shí)會(huì)自動(dòng)的添加 LOCAL_C_INCLUDES 一些額外的頭文件路徑 LOCAL_SHARED_LIBRARIES 需要的共享庫(kù) LOCAL_MODULE C,C++ 本模塊的名字,必須是唯一的 LOCAL_PACKAGE_NAME JAVA的LOCAL_MODULE LOCAL_MODULE_TAGS 模塊標(biāo)記,一般的取值范圍:debug eng tests optionalsamples shell_ash shell_mksh,默認(rèn)optional LOCAL_MODULE_CLASS 這個(gè)不用我們自己定義,系統(tǒng)會(huì)根據(jù)生成模塊類型的不同賦值。取值:APPS,JAVA_LIBRARIES,SHARED_LIBRARIES,STATIC_LIBRARIES,EXECUTABLES LOCAL_MODULE_PATH 模塊的生成后存放的路徑,不用定義,有默認(rèn)值 LOCAL_MODULE_SUFFIX 后綴名,不用定義,有默認(rèn)值(.apk,.jar,.so,.a) LOCAL_BUILT_MODULE_STEM 編譯目標(biāo)要生成的文件名,如果我們定義了 LOCAL_BUILT_STEM值就是$(LOCAL_BUILT_STEM)$(LOCAL_MODULE_SUFFIX),否則就是$(LOCAL_MODULE)$(LOCAL_MODULE_SUFFIX)。若要編譯JAVA的庫(kù)文件和執(zhí)行文件會(huì)被置為jablib.jar和package.apk。 LOCAL_INSTALLED_MODULE_STEM 定義規(guī)則跟LOCAL_BUILT_MODULE_STEM相同,但是不會(huì)有設(shè)置為單一值的情況。 LOCAL_BUILT_MODULE 編譯目標(biāo)完整的路徑和文件名 LOCAL_PRELINK_MODULE只有在編譯.so的時(shí)候才會(huì)有的選項(xiàng),主要是通過預(yù)鏈接的方式來(lái)加快程序啟動(dòng)和執(zhí)行的速度,如果設(shè)置是真的話,那你要在build/core/prelink-linux-arm.map中定義你的庫(kù)需要使用的空間,空間不夠的話會(huì)報(bào)錯(cuò) 4. include$(BUILD_SHARED_LIBRARY) BUILD_SHARED_LIBRARY在config.mk里有定義,指向相應(yīng)的.mk文件,根據(jù)要生成的模塊的類型,包含相應(yīng)的文件。 BUILD_HOST_STATIC_LIBRARY:= $(BUILD_SYSTEM)/host_static_library.mk BUILD_HOST_SHARED_LIBRARY:= $(BUILD_SYSTEM)/host_shared_library.mk BUILD_STATIC_LIBRARY:= $(BUILD_SYSTEM)/static_library.mk BUILD_RAW_STATIC_LIBRARY := $(BUILD_SYSTEM)/raw_static_library.mk BUILD_SHARED_LIBRARY:= $(BUILD_SYSTEM)/shared_library.mk BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk BUILD_RAW_EXECUTABLE:= $(BUILD_SYSTEM)/raw_executable.mk BUILD_HOST_EXECUTABLE:= $(BUILD_SYSTEM)/host_executable.mk BUILD_PACKAGE:= $(BUILD_SYSTEM)/package.mk BUILD_HOST_PREBUILT:= $(BUILD_SYSTEM)/host_prebuilt.mk BUILD_PREBUILT:= $(BUILD_SYSTEM)/prebuilt.mk BUILD_MULTI_PREBUILT:= $(BUILD_SYSTEM)/multi_prebuilt.mk BUILD_JAVA_LIBRARY:= $(BUILD_SYSTEM)/java_library.mk BUILD_STATIC_JAVA_LIBRARY:= $(BUILD_SYSTEM)/static_java_library.mk BUILD_HOST_JAVA_LIBRARY:= $(BUILD_SYSTEM)/host_java_library.mk BUILD_DROIDDOC:= $(BUILD_SYSTEM)/droiddoc.mk BUILD_COPY_HEADERS := $(BUILD_SYSTEM)/copy_headers.mk BUILD_KEY_CHAR_MAP := $(BUILD_SYSTEM)/key_char_map.mk 主要分為兩種類型:prebuilt和bin/lib文件。這些.mk文件都包含build/core/base_rule.mk。這個(gè)文件的作用如下: (1). 根據(jù)LOCAL_IS_HOST_MODULE,LOCAL_MODULE_CLASS,LOCAL_MODULE這三個(gè)變量的值來(lái)判斷這個(gè)模塊是否是全局唯一的,我們應(yīng)該使LOCAL_MODULE全局唯一的。 (2). 設(shè)置LOCAL_MODULE_PATH的默認(rèn)值。LOCAL_MODULE_PATH:=$($(my_prefix)OUT$(use_data)_$(LOCAL_MODULE_CLASS))若my_prefix=TARGET_ use_data=”” LOCAL_MODULE_CLASS=APPS 則LOCAL_MODULE_PATH=$(TARGET_OUT_APPS)。TARGET_OUT_APPS在envsetup.mk定義TARGET_OUT_APPS=out/target/product/generic/system/app (3). 設(shè)置LOCAL_BUILT_MODULE的默認(rèn)值。LOCAL_BUILT_MODULE:=$(built_module_path)/$(LOCAL_BUILT_MODULE_STEM),built_module_path就是編譯目標(biāo)存放的路徑。有兩種路經(jīng)built_module_path=target/common/obj/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)__intermediates/,built_module_path=/target/product/generic/obj/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)__intermediates/。以Camera為例:LOCAL_BUILT_MODULE=out/target/product/generic/obj/APPS/Camera_intermediates/Camera.apk。 (4). 設(shè)置LOCAL_INSTALLED_MODULE的默認(rèn)值。LOCAL_INSTALLED_MODULE=$(LOCAL_MODULE_PATH)/$(LOCAL_MODULE_SUBDIR)$(LOCAL_INSTALLED_MODULE_STEM),這里L(fēng)OCAL_MODULE_SUBDIR留給我們自己定義一般為空。但是要記得的是當(dāng)我們?cè)O(shè)置了它之后,要在每個(gè)模塊的最后要將這個(gè)值清空,因?yàn)槟J(rèn)CLEAR_VARS是不會(huì)清空這個(gè)值的。以Camera為例:LOCAL_INSTALLED_MODULE=out/target/product/generic/system/app/Camera.apk (5). 將.aidl和.logtags文件轉(zhuǎn)化為.java文件,存放在out/target/common/obj /src/,out/target/common/obj/目錄是JAVA的中間文件的存放目錄 (6). 定義.PHONY:$(LOCAL_MODULE)目標(biāo)規(guī)則.拷貝$(LOCAL_BUILT_MODULE)到$(LOCAL_INSTALLED_MODULE),這兩個(gè)變量的值前面都有說(shuō)明。若不想把這個(gè)模塊編譯進(jìn)系統(tǒng)的話,聲明LOCAL_UNINSTALLABLE_MODULE即可(只適用于靜態(tài)庫(kù))。在這里只是拷貝文件,真正的編譯工作是在它的外層.mk文件做的,并把生成的目標(biāo)文件放在$(LOCAL_BUILT_MODULE)。若是prebuild就不需要編譯了,只是將已經(jīng)存在的文件做簡(jiǎn)單的拷貝工作。當(dāng)我們要安裝指定的模塊到系統(tǒng)的時(shí)候,只要make $(LOCAL_MODULE)就行了。定義cleantarget目標(biāo)規(guī)則,刪除$(LOCAL_BUILT_MODULE),$(LOCAL_INSTALLED_MODULE), $(intermediates)文件或目錄 (7). 定義或添加以ALL_MODULES.開頭的值,將本模塊變量保存起來(lái)。 ALL_MODULES.$(LOCAL_MODULE).CLASS ALL_MODULE_TAGS ALL_MODULE_TAGS.$(LOCAL_MODULE_TAGS) ALL_MODULE_NAME_TAGS (8). 包含$(BUILD_SYSTEM)/notice_files.mk,這個(gè)我沒細(xì)看估計(jì)是生成本模塊的NOTICE文件
|
|
|