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

Proguard提示缺失R$raw类,添加-keep无效,如何正确处理?

解决R$raw类缺失的正确方式
  • 核对R类包名引用
    确认代码里导入的R类属于当前项目模块,别误引用其他模块的R类。多模块项目里IDE自动导入容易出错,手动检查并修正import语句,确保是import my.package.name.R;。

  • 检查raw资源的合法性
    确认res/raw目录下存在目标资源文件,文件名必须是小写字母、数字或下划线组合,不能有大写、空格或特殊字符——不符合规则的资源不会被R类收录。

  • 修正ProGuard规则
    单独写-keep class my.package.name.R$raw不足以保留字段,要针对性保留内部类的静态字段,正确规则如下:

    -keepclassmembers class my.package.name.R$raw {
        public static <fields>;
    }
    

    如果需要保留所有资源类的字段,也可以用更通用的规则:

    -keep class my.package.name.R { *; }
    -keepclassmembers class my.package.name.R$* {
        public static <fields>;
    }
    

    注意包名必须和项目实际包名完全一致,多模块场景下要对应到资源所在模块的包名。

  • 清理缓存并重建项目
    执行Build菜单下的Clean Project,再执行Rebuild Project。缓存异常可能导致R类生成不完整,清理后重新构建能解决这类问题。

  • 排查混淆规则冲突
    若开启了minifyEnabled true,检查所有proguard-rules.pro文件(包括当前模块和依赖模块的),确保没有其他规则误删了R类相关代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:34:56