版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、呵呵,看到上面 的內(nèi)容,都會(huì)笑,這是我見(jiàn)過(guò)最簡(jiǎn)單的Makefile 了,再看下16 SRC_HEADERS := 17$(TOPDIR)system/core/include 18$(TOPDIR)hardware/libhardware/include 19$(TOPDIR)hardware/libhardware_legacy/include 20$(TOPDIR)hardware/ril/include 21$(TOPDIR)dalvik/libnativehelper/include build/core/mak在 mak 里,定義了變量 TOPDIR,TOP 為當(dāng)前目錄,BUILD_
2、SYSTEM 為 build/core目錄。在49行,包含了 build/core/config.mk 文件。后面的代碼是 check 環(huán)境 變量,所有的 Makefile 都通過(guò) build/core/ma k 這個(gè)文件組織在一起,它定義了一個(gè)默認(rèn) goals:droid,當(dāng) 在TOP 目錄下,敲Make 實(shí)際上就等同于 執(zhí)行make droid。當(dāng) Make include 所有的文件,完成對(duì)所有 make 我文件的 以后就會(huì)尋找生成 droid 的規(guī)則,依次生成它的依賴,直到所有滿足的模塊被編譯好,然后使用相應(yīng)的工具打包成相應(yīng)的 img。這兒不是 的重點(diǎn),不再多說(shuō)。2. build/co
3、re/config.mk該文件被mak 包含。定義了以下環(huán)境變量:1 # DO NOT EDIT THIS FILE #2 include build/core/mak3 # DO NOT EDIT THIS FILE #Android 編譯過(guò)程詳解(二)通過(guò)上篇文章,分析了編譯 android 時(shí) source build/envsetup.sh 和ch 命令,在執(zhí)行完上述兩個(gè)命令后,就可以進(jìn)行編譯 android 了。1. make執(zhí)行 make 命令的結(jié)果就是去執(zhí)行當(dāng)前目錄下的 Makefile 文件,來(lái)看下它的內(nèi)容:上述命令變量其實(shí)是對(duì)應(yīng)的mk 文件名,所有的 Android.mk 文
4、件里基本上都包含上述命令 109 # 110 # Define most of the global variables. These are the onest 111 # are specific to the users build configuration.變量,如: CLEAR_VARS:用來(lái)清除之前定義的環(huán)境變量 BUILD_SHARED_LIBRARY:用來(lái)指定編譯動(dòng)態(tài)庫(kù)過(guò)程43 CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk44 BUILD_HOST_SIC_LIBRARY:= $(BUILD_SYSTEM)/host_sic_libra
5、ry.mk45 BUILD_HOST_SHARED_LIBRARY:= $(BUILD_SYSTEM)/host_shared_library.mk46 BUILD_SIC_LIBRARY:= $(BUILD_SYSTEM)/sic_library.mk47 BUILD_RAW_SIC_LIBRARY := $(BUILD_SYSTEM)/raw_sic_library.mk48 BUILD_SHARED_LIBRARY:= $(BUILD_SYSTEM)/shared_library.mk49 BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk5
6、0 BUILD_RAW_EXECUTABLE:= $(BUILD_SYSTEM)/raw_executable.mk51 BUILD_HOST_EXECUTABLE:= $(BUILD_SYSTEM)/host_executable.mk52 BUILD_PACKAGE:= $(BUILD_SYSTEM)/package.mk53 BUILD_HOST_PREBUILT:= $(BUILD_SYSTEM)/host_prebuilt.mk54 BUILD_PREBUILT:= $(BUILD_SYSTEM)/prebuilt.mk55 BUILD_MULTI_PREBUILT:= $(BUIL
7、D_SYSTEM)/multi_prebuilt.mk56 BUILD_JAVA_LIBRARY:= $(BUILD_SYSTEM)/java_library.mk57 BUILD_SIC_JAVA_LIBRARY:= $(BUILD_SYSTEM)/sic_java_library.mk58 BUILD_HOST_JAVA_LIBRARY:= $(BUILD_SYSTEM)/host_java_library.mk59 BUILD_DROIDDOC:= $(BUILD_SYSTEM)/droiddoc.mk60 BUILD_COPY_HEADERS := $(BUILD_SYSTEM)/co
8、py_headers.mk61 BUILD_KEY_CHAR_MAP := $(BUILD_SYSTEM)/key_char_map.mk然后定義了下面幾個(gè)重要的編譯命令 22$(TOPDIR)frameworks/base/include 23$(TOPDIR)frameworks/base/opengl/include 24$(TOPDIR)external/skia/include 25 SRC_HOST_HEADERS:=$(TOPDIR)tools/include 26 SRC_LIBRARIES:= $(TOPDIR)libs 27 SRC_SERVERS:= $(TOPDIR)s
9、ervers 28 SRC_DIR := $(TOPDIR)build/ 29 SRC_API_DIR := $(TOPDIR)frameworks/base/api第25行,判斷_PRODUCT 是否為空,根據(jù)上一節(jié)分析可知,_PRODUCT=fs10034 # the variant - the set of filest are included for a build35 ifeq ($(strip $(_BUILD_VARIANT),)36_BUILD_VARIANT := eng 25 ifeq ($(_PRODUCT),)#判斷_PRODUCT 是否為空, 26 ifeq ($(
10、_SIMULATOR),true) 27_PRODUCT := sim 28 else 29_PRODUCT := generic 30 endif 31 endif112行又包含了另外一個(gè)重要的mk 文件 envsetup.mk,來(lái)看一下。3. envsetup.mk 112 include $(BUILD_SYSTEM)/envsetup.mk 113 114 # Boards may be defined under $(SRC_DIR)/board/$(_DEVICE) 115 # or under vendor/*/$(_DEVICE). Search in both pla, bu
11、t 116 # make sure only one exists. 117 # Real boards should always be assoted win OEM vendor. 118 board_config_mk := 119$(strip $(wildcard 120$(SRC_DIR)/board/$(_DEVICE)/BoardConfig.mk 121vendor/*/$(_DEVICE)/BoardConfig.mk 122) 123 ifeq ($(board_config_mk),) 124$(error No config file found for_DEVIC
12、E $(_DEVICE) 125 endif 126 ifneq ($(words $(board_config_mk),1) 127$(error Multipoard config files for_DEVICE $(_DEVICE):$(board_config_mk) 128 endif 129 include $(board_config_mk) 130_DEVICE_DIR := $(patsubst %/,%,$(dir $(board_config_mk) 131 board_config_mk := 148 # 149 # figure out the output dir
13、ectories 150 151 ifeq (,$(strip $(OUT_DIR) 152 OUT_DIR := $(TOPDIR)out 153 endif 154 155 DEBUG_OUT_DIR := $(OUT_DIR)/debug 156 157 # Move the host orunder the debug/ directory 158 # if nesary. 159_OUT_ROOT_release := $(OUT_DIR)/ 160_OUT_ROOT_debug := $(DEBUG_OUT_DIR)/ 161_OUT_ROOT := $(_OUT_ROOT_$(_
14、BUILD_TYPE) 162 . 184 PRODUCT_OUT := $(_PRODUCT_OUT_ROOT)/$(_DEVICE) 187 188 HOST_OUT_EXECUTABLES:= $(HOST_OUT)/bin 189 HOST_OUT_SHARED_LIBRARIES:= $(HOST_OUT)/lib 190 HOST_OUT_JAVA_LIBRARIES:= $(HOST_OUT)/framework 191 HOST_OUT_SDK_ADDON := $(HOST_OUT)/sdk_addon . 200_OUT_ERMEDIATES := $(PRODUCT_OU
15、T)/obj 201_OUT_HEADERS:= $(_OUT_ERMEDIATES)/include 202_OUT_ERMEDIATE_LIBRARIES := $(_OUT_ERMEDIATES)/lib 203MON_ERMEDIATES := $(MON_OUT_ROOT)/obj 204 205_OUT := $(PRODUCT_OUT)/system 206_OUT_EXECUTABLES:= $(_OUT)/bin 207_OUT_OPTIONAL_EXECUTABLES:= $(_OUT)/xbin 208_OUT_SHARED_LIBRARIES:= $(_OUT)/lib
16、 209_OUT_JAVA_LIBRARIES:= $(_OUT)/framework 210_OUT_APPS:= $(_OUT)/app 211_OUT_KEYLAYOUT := $(_OUT)/usr/keylayout在41行又包含了 product_config.mk 文件,等會(huì)再分析它,先看下面的 37 endif 38 39 # Read the product specs so we an get_DEVICE and other 40 # variablest we need in order to locate the output files. 41 include $(
17、BUILD_SYSTEM)/product_config.mk $(_OUT_UNSTRIPPED)/system/lib上面的代碼是指定了目標(biāo)輸出代碼的位置和主機(jī)輸出代碼的位置,重要的幾個(gè)如下:230_ROOT_OUT_UNSTRIPPED := $(_OUT_UNSTRIPPED) 231_ROOT_OUT_SBIN_UNSTRIPPED := $(_OUT_UNSTRIPPED)/sbin232_ROOT_OUT_BIN_UNSTRIPPED := $(_OUT_UNSTRIPPED)/bin 233234_ROOT_OUT := $(PRODUCT_OUT)/root 235_ROOT
18、_OUT_BIN := $(_ROOT_OUT)/bin236_ROOT_OUT_SBIN := $(_ROOT_OUT)/sbin 237_ROOT_OUT_ETC := $(_ROOT_OUT)/etc238_ROOT_OUT_USR := $(_ROOT_OUT)/usr 239240_RECOVERY_OUT := $(PRODUCT_OUT)/recovery 241_RECOVERY_ROOT_OUT := $(_RECOVERY_OUT)/root 242 243_SYSLOADER_OUT := $(PRODUCT_OUT)/sysloader244_SYSLOADER_ROO
19、T_OUT := $(_SYSLOADER_OUT)/root 245_SYSLOADER_SYSTEM_OUT := $(_SYSLOADER_OUT)/root/system 246 247_INSTALLER_OUT := $(PRODUCT_OUT)/installer248_INSTALLER_DATA_OUT := $(_INSTALLER_OUT)/data 249_INSTALLER_ROOT_OUT := $(_INSTALLER_OUT)/root250_INSTALLER_SYSTEM_OUT := $(_INSTALLER_OUT)/root/system212_OUT
20、_KEYCHARS := $(_OUT)/usr/keychars 213_OUT_ETC := $(_OUT)/etc214_OUT_SIC_LIBRARIES:= $(_OUT_ERMEDIATES)/lib 215_OUT_NOTICE_FILES:=$(_OUT_ERMEDIATES)/NOTICE_FILES 216 217_OUT_DATA := $(PRODUCT_OUT)/data218_OUT_DATA_EXECUTABLES:= $(_OUT_EXECUTABLES) 219_OUT_DATA_SHARED_LIBRARIES:= $(_OUT_SHARED_LIBRARI
21、ES)220_OUT_DATA_JAVA_LIBRARIES:= $(_OUT_JAVA_LIBRARIES) 221_OUT_DATA_APPS:= $(_OUT_DATA)/app222_OUT_DATA_KEYLAYOUT := $(_OUT_KEYLAYOUT) 223_OUT_DATA_KEYCHARS := $(_OUT_KEYCHARS)224_OUT_DATA_ETC := $(_OUT_ETC) 225_OUT_DATA_SIC_LIBRARIES:= $(_OUT_SIC_LIBRARIES) 226 227_OUT_UNSTRIPPED := $(PRODUCT_OUT)
22、/symbols228_OUT_EXECUTABLES_UNSTRIPPED := $(_OUT_UNSTRIPPED)/system/bin 229_OUT_SHARED_LIBRARIES_UNSTRIPPED := 157 include $(BUILD_SYSTEM)/product.mk . 160 # Read in all of the product definitions specified by the AndroidProducts.mk 161 # fileshe tree. 162 # 163 #TODO: when we start allowing direct
23、poers to product files, 164 #guaranteet theyrehis list. 165 $(call import-products, $(get-all-product-makefiles) 166 $(check-all-products) . 170 # Convert a short name like soonero the path to the product 171 # file definingt product. 172 # 173ERNAL_PRODUCT := $(call resolve-short-product-name, $(_P
24、RODUCT) . 176 # Find the devicet this product maps to. 177_DEVICE := $(PRODUCTS.$(ERNAL_PRODUCT).PRODUCT_DEVICE) PRODUCT_OUT = 這個(gè)的結(jié)果要根據(jù)product_config.mk 文件內(nèi)容來(lái)決定,其實(shí)是out/product/fs100/_OUT = $(PRODUCT_OUT)/system_OUT_EXECUTABLES = $(PRODUCT_OUT)/system/bin_OUT_SHARED_LIBRARIES = $(PRODUCT_OUT)/system/
25、lib_OUT_JAVA_LIBRARIES = $(PRODUCT_OUT)/system/framework_OUT_APPS = $(PRODUCT_OUT)/system/app_OUT_ETC = $(PRODUCT_OUT)/system/etc_OUT_SIC_LIBRARIES = $(PRODUCT_OUT)/obj/lib_OUT_DATA = $(PRODUCT_OUT)/data_OUT_DATA_APPS = $(PRODUCT_OUT)/data/app_ROOT_OUT = $(PRODUCT_OUT)/root_ROOT_OUT_BIN = $(PRODUCT_
26、OUT)/bin_ROOT_OUT_SBIN = $(PRODUCT_OUT)/system/sbin_ROOT_OUT_ETC = $(PRODUCT_OUT)/system/etc_ROOT_OUT_USR = $(PRODUCT_OUT)/system/usr總結(jié)下:envsetup.mk 文件主要包含了 product_config.mk 文件,然后指定了編譯時(shí)要輸出的所有文件的 OUT 目錄。4. build/core/product_config.mk 17 # 18 # Functions for including AndroidProducts.mk files 19 # 2
27、0157行,又包含了 product.mk 文件165行,調(diào)用函數(shù) import-products, $(get-all-product-makefiles),這兒看上面的注釋:Read in all of the product definitions specified by the AndroidProducts.mk fileshetree.TODO: when we start allowing direct poers to product files, guaranteet theyre his list.意思是說(shuō):指定的目錄下所有的 AndrodProducts.mk 文件中定
28、義的產(chǎn)品信息其實(shí) get-all-product-makefiles 返回所有的產(chǎn)品文件.mkimport-products 函數(shù)去驗(yàn)證這些產(chǎn)品配置文件是否都包含有必須的配置信息,細(xì)節(jié)后面分析。173行調(diào)用了 resolve-short-product-name 函數(shù),它將返回_PRODUCT 產(chǎn)品的配置文件目錄,并賦給ERNAL_PRODUCT也就是說(shuō):ERNAL_PRODUCT = vendor/farsight/products/fs100.mk_DEVICE = fs100如果調(diào)試看其結(jié)果,可以在167行,將#$(dump-product)取消注釋然后在175行添加: $(info $
29、(ERNAL_PRODUCT)在178行添加: $(info $(_DEVICE ),查看調(diào)試結(jié)果??偨Y(jié)一下:product_config.mk 主要vendor 目錄下不同廠商自己定義的AndrodProducts.mk 文件,從該文件里取得所有產(chǎn)品的配置文件,然后再根據(jù)ch 選擇的編譯項(xiàng)_PRODUCT,找到與之對(duì)應(yīng)的配置文件,然后設(shè)置_DEVICE 變量,用于后續(xù)編譯。5. build/core/product.mk vendor/sample/products/AndroidProduct.mk 21 # 22 # Returns the list of all AndroidProd
30、ucts.mk files. 23 # $(call ) isnt nesary. 24 # 25 define _find-android-products-files 26 $(stest -d vendor & find vendor -maxdepth 6 -name AndroidProducts.mk) 27$(SRC_DIR)/product/AndroidProducts.mk 28 endef 29 30 # 31 # Returns the sorted concatenation of all PRODUCT_MAKEFILES 32 # variables set in
31、 all AndroidProducts.mk files. 33 # $(call ) isnt nesary. 34 # 35 define get-all-product-makefiles 36 $(sort 37$(foreach f,$(_find-android-products-files), 38$(eval PRODUCT_MAKEFILES :=) 39$(eval LOCAL_DIR := $(patsubst %/,%,$(dir $(f) 40$(eval include $(f) 41$(PRODUCT_MAKEFILES) 42) 43$(eval PRODUC
32、T_MAKEFILES :=) 44$(eval LOCAL_DIR :=) 45 ) 46 endef通過(guò)注釋可知,本文件中主要是一些用來(lái)處理 AndroidProduct.mk 的函數(shù)_find-android-products-files:用來(lái)獲得 vendor 目錄下,所有名字為 AndroidProduct.mk 的文件列表。get-all-product-makefiles:用來(lái)獲得所有 AndroidProduct.mk 文件里定義的PRODUCT_MAKEFILES 的值(其實(shí)是產(chǎn)品文件路徑名)。在 vendor 目錄下,每個(gè)公司目錄下都會(huì)存在一個(gè) AndroidProduct
33、.mk 文件,這個(gè)文件是用來(lái)定義這個(gè)公司的產(chǎn)品列表,每個(gè)產(chǎn)品用.mk 來(lái)表示如 Android 給的示例:上述文件里定義了產(chǎn)品相關(guān)個(gè)性化信息,如,PRODUCT_PACKAGES 表示要在當(dāng)前產(chǎn)品里添加一些安裝包。由此可見(jiàn),get-all-product-makefiles 函數(shù),其實(shí)就是返回了當(dāng)前公司里全部的產(chǎn)品對(duì)應(yīng)的mk 文件列表??偨Y(jié):如果用戶想個(gè)性定制自己的產(chǎn)品,應(yīng)該有以程,包含上一節(jié)內(nèi)容:創(chuàng)建公司目錄#mkdir vendor/farsight創(chuàng)建一個(gè) vendorsetup.sh 文件,將當(dāng)前產(chǎn)品編譯項(xiàng)添加到ch 里,讓ch 能找到用戶個(gè)性定制編譯項(xiàng)#echo bo fs100-eng vendor/farsight/vendorsetup.sh仿著 Android 示例代碼,在公司目錄下創(chuàng)建 products 目錄 1 # List of apps and optional libraries (Java and native) to puthe add-onsystem imag
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024高考地理一輪復(fù)習(xí)課練14城市空間結(jié)構(gòu)與城市化含解析
- 2024高考地理二輪復(fù)習(xí)微專題八我國(guó)鄉(xiāng)村振興戰(zhàn)略習(xí)題含解析
- 2024高考政治一輪復(fù)習(xí)專題五日益重要的國(guó)際組織練習(xí)含解析新人教版選修3
- 2024高考政治一輪復(fù)習(xí)第一部分經(jīng)濟(jì)生活第二單元生產(chǎn)勞動(dòng)與經(jīng)營(yíng)第五課企業(yè)與勞動(dòng)者教案
- 2024高考政治一輪復(fù)習(xí)題型二體現(xiàn)說(shuō)明類選擇題含解析新人教版
- 2024年適用:智能家居系統(tǒng)研發(fā)與銷售合同
- 2024高考物理一輪復(fù)習(xí)專題77電磁感應(yīng)現(xiàn)象楞次定律練習(xí)含解析新人教版
- 端午節(jié)周記范文集錦8篇
- 教育與科技的融合培養(yǎng)創(chuàng)新型口腔醫(yī)療器械設(shè)計(jì)師
- 二零二五年度酒店前臺(tái)正規(guī)雇傭合同范本(含福利待遇明細(xì))3篇
- DB3305T 285-2023 地理標(biāo)志產(chǎn)品 德清早園筍
- 2024年浙江杭州師范大學(xué)附屬醫(yī)院招聘筆試真題
- (八省聯(lián)考)河南省2025年高考綜合改革適應(yīng)性演練 化學(xué)試卷合集(含答案逐題解析)
- 學(xué)校自習(xí)室管理及收費(fèi)方案
- 自來(lái)水工程施工方案
- 2024年度科研機(jī)構(gòu)實(shí)驗(yàn)技術(shù)人員勞務(wù)派遣合作框架
- 2023年中職《計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)》秋季學(xué)期期末考試試卷(附答案)
- 2025七年級(jí)下道德與法治教學(xué)工作計(jì)劃
- 2025年護(hù)理部護(hù)士理論培訓(xùn)計(jì)劃
- 環(huán)保管家管家式管家式一站式服務(wù)合同
- 醫(yī)療廢物污水培訓(xùn)
評(píng)論
0/150
提交評(píng)論