You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Release构建中菜单所用Drawable被删除的问题求助

解决方案:Release构建中保留菜单Drawable资源

针对你遇到的Release构建时菜单Drawable被意外删除的问题,试试以下几个排查和解决步骤:

  • 确认Gradle配置的作用范围
    确保你修改的是当前业务模块的build.gradle(不是根项目的build.gradle),并且没有其他构建配置(比如productFlavors)覆盖了release的shrinkResources和minifyEnabled设置。可以同步项目后,在Android Studio的Build Variants面板选中Release变体,查看对应的配置是否生效。

  • 修正资源保留文件的配置
    你在res/raw下创建的资源保留文件,注意几点:

    1. 文件名建议命名为keep.xml(官方约定命名,避免识别问题)
    2. 如果需要保留多个Drawable,用逗号分隔,支持通配符:
      <?xml version="1.0" encoding="utf-8"?>
      <resources xmlns:tools="http://schemas.android.com/tools"
          tools:keep="@drawable/ic_delete,@drawable/ic_menu_*" />
      
    3. 确保文件没有多余空行或格式错误,XML语法必须严格正确。
  • 检查菜单资源的引用方式
    如果你的菜单图标是通过动态代码加载的(比如用getResources().getIdentifier()拼接资源名),即使关闭资源压缩,构建工具也可能因无法识别静态引用而误删资源。这种情况下,除了在keep.xml中保留,还可以在代码中添加一个无实际用途的静态引用,让构建工具感知到资源被使用:

    // 仅用于告知构建工具该资源被引用,无需实际调用
    private static final int DUMMY_KEEP = R.drawable.ic_delete;
    
  • 清理构建缓存并重新构建
    旧的构建缓存可能导致配置不生效,执行以下操作:

    1. 点击Android Studio顶部菜单栏的Build > Clean Project
    2. 再执行Build > Rebuild Project
    3. 尝试重新生成Release包

内容的提问来源于stack exchange,提问作者SirBzik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:50:31