简单资源替换生效流程可以进行以下几步:
预制方式:
-
生成overlay apk;
-
将overlay apk push 到vendor/overlay目录下;
-
重启手机;
-
主题切换
-
此时若目标应用正在显示,Activity 会重新走生命周期,显示新的资源信息。
安装方式
-
生成overlay apk;
-
安装apk
-
重启手机;
-
主题切换
-
此时若目标应用正在显示,Activity 会重新走生命周期,显示新的资源信息。
生成overlay apk(Android studio)
假如手机预制 默认和theme1, theme2 3个主题
制作theme1主题流程如下
a. AS内新建项目,仅保留AndroidManifest.xml 和res目录下要替换的资源文件。
b. 用系统签名对overlay app 进行签名,保持签名一致。
以空调为例,车机空调包名为com.android.car.hvac,demo overlay app包名为com.abc.theme1.hvac(theme1主题 overlay apk 包名必须满足带”theme1“, 同理theme2主题overlay apk 包名必须带“theme2” )
代码结构图
AndroidManifest.xml
仅包含以下信息即可,其中targetPackage为要替换资源的app包名
res目录下仅保留需要替换的资源信息(values下的colors.xml , strings.xml , dimens.xml themes.xml等 和 drawables/xml目录下的资源, 不支持替换布局文件)
如colors.xml 中
常用adb命令
-
命令可以查看系统里面的overlay包以及包的状态。:
adb shell dumpsys overlay
-
设置每个资源包的状态,设置成enable就会立即生效,(具体命令可以到代码里面查到shellcommand)
adb exec-out cmd overlay enable com.abc.theme1.hvac
主要控制实现代码逻辑
控制模块Androidmanifest.xml 需要权限
设置时序图
备注
-
可以替换values下的colors.xml , strings.xml , dimens.xml themes.xml等 和 drawables/xml目录下的资源, 不支持替换布局文件
-
2s内完成替换
-
替换过程中添加窗口覆盖之前页面,以保证之前页面重新绘制屏幕不闪烁,当前demo 用窗口为只包含图片的View
-
预制主题apk 需放在目录 vendor/overlay下
-
主题生效逻辑为Activity 会重新启动,因此应用需关注后台应用Activity重新启动后相关信息是否和切换前相同(输入框信息默认仍然存在), 同时需要监听setting 数据库的变化更新虚浮窗口 等非Activity ;
-
待替换app 使用资源 路径位于 frameworks/support/car/ 的资源尚不支持替换 ==>使用frameworks/base/core/res下的资源或者应用本身内置资源
参考链接
https://blog.csdn.net/kongbaidepao/article/details/80801366
https://blog.csdn.net/ieearth/article/details/87374289
https://blog.csdn.net/shanshan_blog/article/details/53587053