背景
项目中需要支持"动态替换 App 桌面图标"(活动图标、节日图标等)。
本次主要实践的是 方案1:activity-alias ,并补充评估了 方案2:双启动入口。
方案对比
方案1:activity-alias(本次落地)
参考:https://27house.cn/archives/1342
核心思路:
- 保留真实启动
Activity - 通过多个
activity-alias配置不同图标 - 运行时通过
PackageManager#setComponentEnabledSetting启停 alias,实现动态图标切换
方案2:两个启动入口
参考:https://github.com/windfone/DynamicIcon/blob/main/app/src/main/AndroidManifest.xml
特点:
- 配置两个 launcher 入口
- 冷启动后,出出现两个App进程
实践中遇到的问题与结论
1. 新图标由代码控制后,发版不要轻易删除 alias 列表(高风险)
参考:
- https://blog.csdn.net/JiaoJunfeng/article/details/129360815
- https://juejin.cn/post/7457897807921758234
现象
覆盖安装后,如果当前桌面展示的图标对应 alias 在新版本被删除,可能出现:
- 点击桌面图标无法打开
- 系统提示找不到入口
- 直接崩溃
原因
系统 Launcher 可能仍保留旧组件引用;新版本删除 alias 后,该组件失效。
结论
- 历史上线过的 alias 不要直接删除
- 可"保留但禁用",不要"彻底移除"
- alias 应按兼容协议管理(只增不减,谨慎清理)
2. 开发工具编译安装时报错:找不到启动页面
报错示例:
text
Activity class {com.imaginer.xxx/com.imaginer.xxx.activity.welcome.ACT_SplashScreen} does not exist