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

启用严格收缩器后MotionLayout报Resources$NotFoundException崩溃如何解决?

解决启用严格收缩器后MotionLayout引发的Resources$NotFoundException崩溃问题

启用严格代码收缩后出现这个崩溃,核心原因是严格收缩器的静态资源分析无法识别MotionLayout在运行时动态加载的资源,这些资源会被误判为未使用而被移除,最终导致MotionScene加载时找不到对应资源ID。

解决步骤:

  1. 定位缺失的资源
    先找到报错里的资源ID #0x7f0a03f0 对应的具体资源:

    • 执行项目的R文件生成任务(比如./gradlew app:generateReleaseRFile),在build/generated/not_namespaced_r_class_sources/release/r/[你的包名]/R.java里搜索该ID,找到对应的资源名称(比如可能是某个motion scene里的transition、constraintSet资源)。
  2. 配置资源保留规则
    根据定位到的资源类型,选择以下一种方式添加保留规则:

    方式一:通过ProGuard/R8规则保留

    在proguard-rules.pro文件中添加:

    # 保留单个资源ID
    -keepresourceids id/[你的资源名称]
    
    # 如果是整个motion scene文件,保留所有motion相关xml
    -keepresources xml/motion_scene_*.xml
    

    方式二:通过build.gradle配置保留

    在app模块的build.gradle中,给对应的buildType添加资源保留:

    android {
        buildTypes {
            release {
                shrinkResources true
                // 保留指定的motion资源文件
                keepResources {
                    include "xml/motion_scene_main.xml"
                    // 或者批量保留:include "xml/motion_*.xml"
                }
            }
        }
    }
    
  3. 验证修复效果
    重新构建release包,安装后测试包含MotionLayout的页面,确认崩溃不再出现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:38:17