Android Overlay机制总结

参考博客,很详细,值得一看,查看点击

背景

车机整机开发有主题壁纸商店。需要满足动态切换资源。选择使用overlay机制实现。和手机上不同的是,使用主题后,指定的所有应用内的资源都需要替换。

效果

video-overlay


通过了解,overlay机制比较适合,不需要去改变目标应用本身的结构。不同主题只需要添加不同的主题apk 就行。

实现步骤
  1. 制作主题apk,overlay项目。
  2. 应为overlay项目只能配置一个目标,需要fw层作出对应修改。
  3. fw层 设置主题apk 生效和失效。
制作Overlay项目

目录结构
目录结构
里面只有资源文件,无代码。需要系统签名。当然资源文件名称,要和目标项目资源名称一致。
清单文件配置
在这里插入图片描述
添加overlay 标签,制定目标应用包名。更多标签内容介绍,可以详细百度。这样Overlay apk 就做好了。

安装好之后,可以用命令查看 adb shell dumpsys overlay
在这里插入图片描述mIsEnabled 是false ,目前还没有生效,生效和失效的adb命令:
adb shell cmd overlay enable com.example.themoverlaydemo
adb shell cmd overlay disable com.example.themoverlaydemo

启动后mIsEnabled 就会变成true。接收命令的类是OverlayManagerShellCommand,路径/homeframeworks/base/services/core/java/com/android/server/om

FW层对应的修改
  1. 配置需要生效的目标应用包名
    frameworks/base/core/res/res/values/arrays.xml 添加目标包名
    <string-array translatable="false" name="config_xxxxxtargetpackages">
        <item>com.android.systemui</item>
        <item>com.android.launcher</item>
        <item>com.xxxxx.appanel</item>
        <item>com.xxxxx.themestore</item>
        <item>com.xxxxx.media</item>
        <item>com.xxxxx.aircondition</item>
        <item>com.android.systemui.plugin</item>
    </string-array>

frameworks/base/core/res/res/values/symbols.xml 中添加array名称

  <java-symbol type="array" name="config_simbatargetpackages" />
  1. OverlayManagerService 设置目标列表
public OverlayManagerService(@NonNull final Context context,
            @NonNull final Installer installer) {
   
        super(context);
        mSettingsFile =
            new AtomicFile(new File(Environment.getDataSystemDirectory(), "overlays.xml"), "overlays");
        mPackageManager = new PackageManagerHelper();
        mUserManager = UserManagerService.getInstance();
        //获取配置的目标列表
        mSimbaOverlayTarget =
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值