首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >failed to generate resource map for '/vendor/overlay/SystemUIResOverlay/SystemU

failed to generate resource map for '/vendor/overlay/SystemUIResOverlay/SystemU

原创
作者头像
用户10171634
发布2025-10-24 10:15:20
发布2025-10-24 10:15:20
910
举报

是从SystemUI copy到overlay 是吧?发现 SystemUI 有一个新的文件夹,而overlay 没有,就报错了?

10-21 16:22:52.013 28008 28009 W idmap2d : failed to parse idmap header of '/data/resource-cache/vendor@overlay@SystemUIResOverlay@SystemUIResOverlay.apk@idmap'

10-21 16:22:52.015 28008 28009 E idmap2d : failed to retrieve loaded package at index 0 -> failed to generate resource map for '/vendor/overlay/SystemUIResOverlay/SystemUIResOverlay.apk'

SystemUI 新增了资源文件 比如res/drawable-land/ic.png

那么在对应的新建 SystemUIResOverlay/res/drawable-land/

1️⃣ IDMap 的生成机制

当 Android 系统加载 overlay(RRO)时,idmap2 会做以下事情:

  1. 遍历 原始 APK(SystemUI) 的资源目录和资源文件,收集资源 ID。
  2. 尝试在 overlay APK 中查找 同路径、同名资源,生成资源映射表(IDMap)。
  3. 映射规则:
    • overlay 存在同名资源 → 用 overlay 的资源覆盖原来的资源。
    • overlay 不存在同名资源 → 系统使用原始资源。

2️⃣ 为什么老目录不需要占位

  • 老目录(SystemUI 原本就有的目录,比如 res/drawable/)在 overlay 中不存在:
    • 系统默认认为:overlay 没覆盖 → 使用原始资源。
    • 因为这个目录是基础目录,Android 内部已经知道它存在并有资源。
  • 所以 不报错,即使 overlay 没有 drawable/

3️⃣ 为什么新增目录必须占位

  • 新增目录(比如你后来在 SystemUI 添加的 res/drawable-land/):
    • overlay 中缺失该目录时,idmap2 在生成映射表时:
      1. 遍历 SystemUI 的 drawable-land/ 目录
      2. 尝试在 overlay 中找到同路径的目录或文件
      3. 找不到对应目录 → 无法建立 ID 映射 → 报错
  • 简单理解: 新增目录在原 APK 里是“新字段”,overlay 不提供任何占位,idmap2 无法知道 overlay 对应的 ID → 映射失败。

4️⃣ 解决方法

  • 对于新增目录,只需在 overlay 创建 空目录或空 XML
代码语言:javascript
复制
mkdir -p res/drawable-land
echo '<resources></resources>' > res/values/empty.xml
  • 这样 overlay 有了“占位”,idmap2 就能成功生成 IDMap,即使不覆盖文件。

🔹 小结

类型

overlay 是否必需占位

原因

老目录(SystemUI 原有)

系统默认用原资源,不需要 overlay 占位

新目录(SystemUI 新增)

idmap2 需要 overlay 有目录占位,否则无法生成映射表 → 报错

一句话理解:overlay 是差异包,老字段可以缺,新字段必须占位

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1️⃣ IDMap 的生成机制
  • 2️⃣ 为什么老目录不需要占位
  • 3️⃣ 为什么新增目录必须占位
  • 4️⃣ 解决方法
    • 🔹 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档