尚學堂【官網】-西安Java培訓|c++培訓|Android培訓|安卓培訓|java視頻教程|軟件工程師|-西安雁塔尚學堂計算機學校
Android安卓教程  尚學堂首頁Java學院Android安卓教程

Android 系統 overlay 機制重點小結

www.zyopwk.live 發布人:java  |  來自:本站  |  發布時間:2017-09-28 15:27:42  |  點擊次數:1312

靜態 overlay 和動態 overlay

靜態 overlay:又稱為編譯時 overlay,編譯時資源就已經覆蓋了,一般用在有源碼的apk中。 
動態 overlay:又稱為運行時 overlay,當 apk 在手機中運行時才發生資源覆蓋,一般用在無源碼的apk中。

overlay資源替換的前提和原則

前提:資源所在路徑必須與overlay下資源路徑完全相同。如要替換 Settings 這個應用的String.xml里的資源,該資源文件所在路徑為packages/apps/res/values/,則對應overlay的路徑必須為overlay/packages/apps/res/values/。

原則:overlay替換的是資源,不是文件。舉個例子,應用中String.xml里的內容如下:

<String name="a">aaaString><String name="b">bbbString><String name="c">cccString>
  • 1
  • 2
  • 3

 

overlay中的String.xml里的內容如下:

<String name="a">abcString>
  • 1

 

則最終,apk調用的資源如下:

<String name="a">abcString><String name="b">bbbString><String name="c">cccString>
  • 1
  • 2
  • 3

 

而不是想象的如下:

<String name="a">abcString>
  • 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.

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.

翻譯成中文的大概意思就是: 
1.對于color,bool,String,array,style等資源的值是有他們的鍵確定的,比如

abc

該字符串資源通過鍵 name = “a” 來唯一確定值 abc 。也就是說,overlay里的這類資源文件的文件名不需要與應用包里的資源文件的文件名保持一致。只需要,資源文件里的鍵保持一致就行了。

2.對于布局文件,動畫文件,圖片資源文件等,這些資源文件是通過文件名來唯一確定,所以overlay里的這類資源文件需要與應用包里的資源文件的文件名保持一致。

多個overlay的優先級判定

在mk文件中通過定義PRODUCT_PACKAGE_OVERLAYS或DEVICE_PACKAGE_OVERLAYS變量,后面可以加上多個overlay目錄路徑,以此來實現多個overlay目錄。但是這些目錄是有優先級順序的,PRODUCT_PACKAGE_OVERLAYS下的目錄優先級高于DEVICE_PACKAGE_OVERLAYS下目錄的優先級,寫在前面的目錄優先級高于寫在后面目錄的優先級,舉個例子:

PRODUCT_PACKAGE_OVERLAYS = overlay_A overlay_BDEVICE_PACKAGE_OVERLAYS = overlay_C overlay_D
  • 1
  • 2

 

上述overlay目錄優先級順序:overlay_A >overlay_B> overlay_C >overlay_D

overlay用于新增資源

默認情況下,overlay目錄的資源文件內容只能覆蓋原有軟件包中的資源,而不能新增資源。不讓會造成編譯錯誤。如要允許增加資源,可以將資源放入標簽中,或者一種更加簡便的方法是給aapt命令增加–auto-add-overlay選項。

 

當前文:Android 系統 overlay 機制重點小結
上一頁:Android Manifest內容解析
下一頁:Android源碼分析之備忘錄模式
在線報名(*為必填項)
云南快乐十分开奖走势图