Android平臺Overlay機制

Android overlay 機制允許在不修改packages中apk的情況下,來自定義 framework和package中的資源文件,實現資源的定製。來達到顯示不同的UI得目的(如MIUI)。 
以下幾類能夠通過該機制定義: 
(1),Configurations (string, bool, bool-array) 
(2),Localization (string, string-array) 
(3),UI Appearance (color, drawable, layout, style, theme, animation) 
(4),Raw resources (audio, video, xml) 
For detailed introduction on Android application resources, please refer to: 
  http://developer.android.com/guide/topics/resources/available-resources.html 
1 爲產品添加Overlay目錄

1.1 Product Overlays與Device Overlays 
有兩種不同的overaly目錄定義,來影響最終的效果: 
PRODUCT_PACKAGE_OVERLAYS: used by a particular product 
DEVICE_PACKAGE_OVERLAYS: used several products that share a common device model 
如果包含同一資源,那麼 PRODUCT_PACKAGE_OVERLAYS 將覆蓋 DEVICE_PACKAGE_OVERLAYS 中的, 這兩個定義如下: 
build/core/package.mk (Line: 93) 
1 LOCAL_RESOURCE_DIR := /2 (wildcard(foreach dir, (PRODUCTPACKAGEOVERLAYS),/3(addprefix (dir)/,(LOCAL_RESOURCE_DIR)))) /4 (wildcard(foreach dir, (DEVICEPACKAGEOVERLAYS),/5(addprefix (dir)/,(LOCAL_RESOURCE_DIR)))) /6 (LOCAL_RESOURCE_DIR)  
PRODUCT_PACKAGE_OVERLAYS & DEVICE_PACKAGE_OVERLAYS 功能是一樣的,只是優先級不一樣:PRODUCT_PACKAGE_OVERLAYS 優先於 DEVICE_PACKAGE_OVERLAYS。  
1.2 改變makefile來添加overlays的編譯項  
  爲了添加一個overlay目錄, 需要修改產品的makefile:  
  (for example: device/vendor-name/device-name/product-name.mk)  
添加以下幾行:  
PRODUCT_PACKAGE_OVERLAYS :=  device/vendor-name/device-name/product-name/overlay(LOCAL_RESOURCE_DIR)  PRODUCT_PACKAGE_OVERLAYS & DEVICE_PACKAGE_OVERLAYS 功能是一樣的,只是優先級不一樣:PRODUCT_PACKAGE_OVERLAYS 優先於 DEVICE_PACKAGE_OVERLAYS。  1.2 改變makefile來添加overlays的編譯項    爲了添加一個overlay目錄, 需要修改產品的makefile:    (for example: device/vendor-name/device-name/product-name.mk)  添加以下幾行:  PRODUCT_PACKAGE_OVERLAYS :=  device/vendor-name/device-name/product-name/overlay(PRODUCT_PACKAGE_OVERLAYS) 
Or: 
DEVICE_PACKAGE_OVERLAYS := device/vendor-name/device-name/common/overlay 
如中添加:(DEVICEPACKAGEOVERLAYS)(如:device/vendor−name/device−name/devicebase.mk)中添加:LOCALPATH:=device/vendor−name/device−nameDEVICEPACKAGEOVERLAYS:=(LOCAL_PATH)/overlay 
如果要定義多個overlays目錄,需要用空格隔開。如果有多個目錄,並且都包含同一資源的定義,那麼將使用第一個定義的目錄中的資源。 
1.3 在overlay目錄下創建資源文件 
想覆蓋Android系統自帶package中資源文件, 那麼在overlay目錄下必須包含和要替換package相同的路徑, 該路徑是Android源碼目錄的相對路徑. 
For example, 如果我們想要替換以下目錄的資源文件: 
packages/apps/Settings/res/ 
那麼在overlay目錄下面必須創建一樣的目錄: 
....../overlay目錄/packages/apps/Settings/res/ 
然後放入想要替換的資源(必須和系統package相同路徑和文件名)。 
注意: 
(1),For color, bool, string, array, style/theme types, the resource values are identifed by their keys, so for these types, there is no need to put the resources in a file with the same name as in the original base package. 
(2),For layout, animation, picture drawables and raw types, the resources are indentifed by their file name, and overlay for these resources should keep the file name same as in the base packages.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章