Overlay作用:
保持原生源碼資源不變的基礎(chǔ)上怎静,實(shí)現(xiàn)某些UI的客制化。
通過overlay覆蓋現(xiàn)有系統(tǒng)或應(yīng)用中的資源啥容。如strings, config, drawable...
Overlay實(shí)現(xiàn):
兩種方式:
1.?靜態(tài)overlay蛙酪,SRO-Static resource overly
資源替換發(fā)生在編譯時(shí)鸟整,?需要在Android源碼環(huán)境中進(jìn)行配置二蓝。最終生成一個(gè)apk誉券。
使用條件:有源碼環(huán)境。
好處:內(nèi)存占用少刊愚。
實(shí)現(xiàn):
四個(gè)mk的變量:
DEVICE_PACKAGE_OVERLAYS--
PRODUCT_PACKAGE_OVERLAYS--級(jí)別最高踊跟,也就是優(yōu)化用PRODUCT_PACKAGE_OVERLAYS中的overlays(高於DEVICE_PACKAGE_OVERLAYS)
PRODUCT_ENFORCE_RRO_TARGETS
PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS
在Android O上面 Google增加了一個(gè)enforced RRO的方法,可以把之前的build time overlay強(qiáng)制轉(zhuǎn)換成runtime resource overlay.如果overlay的是framework-res的資源包鸥诽,那麼會(huì)自動(dòng)生成一個(gè)file在/vendor/overlay/framework-res__auto_generated_rro.apk. 裏面會(huì)包含overlay的資源商玫。也就是說,對(duì)於加了PRODUCT_ENFORCE_RRO_TARGETS的模塊牡借,便由SRO變成RRO模式拳昌,如果仍然想保持SRO模式,就需要使用到PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS變量钠龙。
overlay只是覆蓋已有的資源文件炬藤,但對(duì)於新增的資源文件扁远,需要這樣寫:
<!-- add for status bar system icon define -->
? ? <add-resource type="string" name="status_bar_child_mode"/>
? ? <string translatable="false" name="status_bar_child_mode">child_mode</string>
2.?動(dòng)態(tài)overlay,即運(yùn)行時(shí)overlay刻像。RRO-Runtime resource overlay
資源替換發(fā)生在運(yùn)行時(shí),不必要源碼并闲。替換的資源會(huì)獨(dú)立生成一個(gè)*.overlay.apk细睡。
好處:不需要源碼,可以為第三方app進(jìn)行資源替換帝火。
實(shí)現(xiàn):overlay apk?的manifest中加入
<overlay android:targetPackage="com.xxx.xxx" android:priority="1"/>