編輯:關於Android編程
在Android4.2的源碼Build/prduct_config.mk裡面遇到幾個疑惑:
# Convert a short name like "sooner" into the path to the product # file defining that product. # INTERNAL_PRODUCT := $(call resolve-short-product-name, $(TARGET_PRODUCT)) ifneq ($(current_product_makefile),$(INTERNAL_PRODUCT)) $(error PRODUCT_NAME inconsistent in $(current_product_makefile) and $(INTERNAL_PRODUCT)) endif current_product_makefile := all_product_makefiles := all_product_configs := # Find the device that this product maps to. TARGET_DEVICE := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEVICE)
按道理Makefile在讀取product_config.mk文件時,TARGET_DEVICE第一感覺就該被理解我一個合成的變量,當然這是Makefile的原理。但是這裡發現卻不是,為什麼?因為引入了一個node_fns.mk文件。該文件的作用類似規定下完開始的content應該按照它的邏輯來處理,就好像比如定義了一種宏形式,那麼接著的變量處理實際會變為另一中處理方式:
比如這裡實際:
INTERNAL_PRODUCT = device/softwinner/fiber-3g/fiber_3g.mk
TARGET_DEVICE = fiber-3g
說實話自己也不是很理解node_fns.mk的作用,就把他理解為一個定義了好多宏的頭文件吧。
看了下老羅的Android之旅,收獲了很對。上述的內容實質就是$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEVICE)是一個全新的變量。通過對AndroidProducts.mk的內容進行分析,然後加上不同的_product_var_list ,這樣就可以生成全新的變量,都是根據不同的自己定制的產品來生成的。如下的變量就變成了上面提到的TARGET_DEVICE,其實質是在AndroidProducts.mk裡面進行了定義而已:
# Overrides PRODUCT_BRAND := Softwinner PRODUCT_NAME := fiber_3g PRODUCT_DEVICE := fiber-3g PRODUCT_MODEL := Softwinn
PRODUCTS.build/target/product/full.mk.PRODUCT_NAME := fiber_3g PRODUCTS.build/target/product/full.mk.PRODUCT_DEVICE := fiber-3g
_product_var_list := \ PRODUCT_NAME \ PRODUCT_MODEL \ PRODUCT_LOCALES \ PRODUCT_AAPT_CONFIG \ PRODUCT_AAPT_PREF_CONFIG \ PRODUCT_PACKAGES \ PRODUCT_PACKAGES_DEBUG \ PRODUCT_PACKAGES_ENG \ PRODUCT_PACKAGES_TESTS \ PRODUCT_DEVICE \ PRODUCT_MANUFACTURER \ PRODUCT_BRAND \ PRODUCT_PROPERTY_OVERRIDES \ PRODUCT_DEFAULT_PROPERTY_OVERRIDES \ PRODUCT_CHARACTERISTICS \ PRODUCT_COPY_FILES \ PRODUCT_OTA_PUBLIC_KEYS \ PRODUCT_EXTRA_RECOVERY_KEYS \ PRODUCT_PACKAGE_OVERLAYS \ DEVICE_PACKAGE_OVERLAYS \ PRODUCT_TAGS \ PRODUCT_SDK_ADDON_NAME \ PRODUCT_SDK_ADDON_COPY_FILES \ PRODUCT_SDK_ADDON_COPY_MODULES \ PRODUCT_SDK_ADDON_DOC_MODULES \ PRODUCT_DEFAULT_WIFI_CHANNELS \ PRODUCT_DEFAULT_DEV_CERTIFICATE \ PRODUCT_RESTRICT_VENDOR_FILES \ PRODUCT_VENDOR_KERNEL_HEADERS \ PRODUCT_FACTORY_RAMDISK_MODULES \ PRODUCT_FACTORY_BUNDLE_MODULES
對於Android系統中的.mk文件可以在source /build/envsetup.sh後進行調用。比如:
function get_build_var() { T=$(gettop) if [ ! "$T" ]; then echo "Couldn't locate the top of the tree. Try setting TOP." >&2 return fi CALLED_FROM_SETUP=true BUILD_SYSTEM=build/core \ make --no-print-directory -C "$T" -f build/core/config.mk dumpvar-$1 }
該腳本函數就會被在lunch 選擇時,進行chenk products的操作,進一步執行get_build_var TARGET_DEVICE的函數處理。其實質是執行了一次Make的操作。看上去和系統編譯的Make -j8等完全類似。只是他執行了的只有config.mk配置相關的內容而已。進一步依次執行envsetup.mk,到product_config.mk,最終獲得TARGET_DEVICE變量的內容。
6.$DEVICE變量的生成過程,其實就是文件fiber-3g所在的路徑:首先通過source envsetup.sh將所有的device和vendor下的vendorsetup.sh加進來,並完成combo的整合。lunch函數選擇對應的平台後,並會設置好所有編譯所需的環境變量使用下面函數來完成: #設置環境變量
怎麼使用微信?這是一個很廣泛的問題,涉及到微信的各個功能,借助微信我們能夠與好友分享音樂圖片和有趣的鏈接,能夠創建群聊,能夠發發紅包,創建微信公眾號後還能推
(一)概述本節開始講解Android的四大組件之一的Activity(活動);官方文檔:Activity是一個應用程序的組件,他在屏幕上提供了一個區域,允許用戶在上面做一
Android多點觸控技術跟Linux輸入子系統緊密相關。本文將從應用的角度說明Android多點觸控技術的接口和應用。一、多點觸控場景分析網絡上有關Android多點觸
前置文章: 《Android 4.4 Kitkat Phone工作流程淺析(一)__概要和學習計劃》 《Android 4.4 Kitkat Phone工作