RRO 動態(tài)資源替換介紹
簡單介紹:
Runtime Resource Overlay 是從Android5.0開始轩娶,給出的一種能夠在不需要應(yīng)用源碼的情況下,將替換應(yīng)用res資源的一種方法宝与。
替換應(yīng)用資源主要分為兩種:
一,靜態(tài)替換資源:需要源碼冶匹,每次都需要編譯习劫,重新安裝
二,動態(tài)替換資源:不需要源碼嚼隘,只要編譯替換資源apk文件
這里就只介紹動態(tài)替換資源的方法诽里。
步驟:
使用Android Studio 創(chuàng)建兩個項目:
1,被替換資源的應(yīng)用項目
2飞蛹,替換應(yīng)用資源的overlay項目聲明一個MainActivity布局中
TextView
的文本資源例如:
<resources>
<string name="app_name">OverlayDemo</string>
<string name="hello_world">這是原生應(yīng)用的資源</string>
</resources>
我們聲明被替換資源的app應(yīng)用名為OverlayDemo
- 在替換應(yīng)用資源的項目中谤狡,修改清單文件的內(nèi)容如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.zeasn.usra.overlayapp">
<overlay
android:priority="1"
android:targetPackage="com.zeasn.usra.overlaydemo" />
</manifest>
android:priority
用于在多overlay版本共存的情況下,值越高卧檐,代表優(yōu)先級越高墓懂,系統(tǒng)將會優(yōu)先讀取優(yōu)先級別搞的資源包進行替換。
android:targetPackage
用于指定需要替換資源的應(yīng)用包名霉囚。這里的包名要和被替換資源應(yīng)用的包名一致捕仔。
- 將需要修改的資源鍵值寫入overlayapp資源文件中,例如
strings.xml
的內(nèi)容如下:
<resources>
<string name="app_name">OverlayApp</string>
<string name="hello_world">這是RRO加載的資源</string>
</resources>
這里將修改兩處的資源盈罐,一個是應(yīng)用名稱
榜跌,另外一個是MainActivity中文本的字符串值。
特別注意盅粪,Overlay應(yīng)用不應(yīng)該存在其他的代碼钓葫,這個項目僅僅只用于存放替換資源鍵值。
打包簽名
將兩個項目分別打包票顾,并簽名瓤逼,特別注意笼吟,簽名必須一樣安裝
需要被替換資源的應(yīng)用安裝到設(shè)備上,Overlay應(yīng)用簽名生成的apk文件霸旗,需要通過adb push
命令贷帮,push到系統(tǒng)根路徑下的vender/overlay
目錄下,這個操作需要獲取root權(quán)限诱告,具體可以參考希峰的gitbook
獲取root權(quán)限
最后撵枢,開啟應(yīng)用,如果發(fā)現(xiàn)沒有被及時的替換精居,可以重新退出應(yīng)用再次進入锄禽,或者重新啟動設(shè)備靴姿。
最后的效果圖如下:
如果需要再次的替換資源,升高android: priority
的值重新打包簽名,adb push
到overlay目錄下即可逸贾。