Android修改dimen资源后appcompat、drawerlayout报Invalid <dimen>错误
问题描述
修改项目部分dimen尺寸值、精简layout和layout-sw600目录下的冗余布局后,出现资源合并报错,回滚所有修改后问题仍然存在。
报错日志
C:\Users\ImMor\.gradle\caches\transforms-3\fe034c7b18d2d573771961079df9a508\transformed\appcompat-1.3.1\res\values\values.xml:69:4: Invalid <dimen> for given resource value. C:\Users\ImMor\.gradle\caches\transforms-3\ad020443805f3b97590f2a6c038942e6\transformed\drawerlayout-1.1.1\res\values\values.xml:4:4: Invalid <dimen> for given resource value. > Task :app:mergeDebugResources FAILED Execution failed for task ':app:mergeDebugResources'. > A failure occurred while executing com.android.build.gradle.internal.res.ResourceCompilerRunnable > Resource compilation failed. Check logs for details. * Try: Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* What went wrong: Execution failed for task ':app:mergeDebugResources'. > A failure occurred while executing com.android.build.gradle.internal.res.ResourceCompilerRunnable > Resource compilation failed. Check logs for details.
相关配置文件
默认dimen配置
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- font size --> <dimen name="font_text_headline_largest">36sp</dimen> <dimen name="font_text_headline_large">20sp</dimen> <dimen name="font_text_headline">18sp</dimen> <dimen name="font_text_large">16sp</dimen> <dimen name="font_text_normal">14sp</dimen> <dimen name="font_text_small">13sp</dimen> <dimen name="font_text_smallest">12sp</dimen> <!-- --> <!-- spacing --> <dimen name="wrapContent">0dp</dimen> <dimen name="spacing_small">4dp</dimen> <dimen name="spacing_normal">8dp</dimen> <dimen name="spacing_large">16dp</dimen> <dimen name="spacing_largest">24dp</dimen> <!-- --> <!-- view: Cardview --> <dimen name="cv_corner_radius">4dp</dimen> <dimen name="cv_corner_radius_large">8dp</dimen> <dimen name="cv_elevation">4dp</dimen> <dimen name="cv_home_width">0.30</dimen> <dimen name="cv_home_height">0.38</dimen> <dimen name="cv_service_flow_width">0.35</dimen> <dimen name="cv_service_flow_width_large">0.38</dimen> <dimen name="cv_service_message_height">200dp</dimen> <dimen name="cv_service_message_height_large">230dp</dimen> <dimen name="cv_service_option_height">225dp</dimen> <dimen name="cv_logged_in_out_height">0.17</dimen> <dimen name="cv_logged_in_out_width">0.35</dimen> <dimen name="cv_logout_height">0.15</dimen> <!-- --> <!-- view: Imageview --> <dimen name="iv_home_width">0.80</dimen> <dimen name="iv_home_width_small">0.75</dimen> <dimen name="iv_home_height">0.32</dimen> <dimen name="iv_home_height_small">0.30</dimen> <dimen name="iv_logo_width">190dp</dimen> <dimen name="iv_service">50dp</dimen> <dimen name="iv_drawable_height">12dp</dimen> <dimen name="iv_drawable_width">12dp</dimen> <dimen name="iv_shop_height">0.50</dimen> <!-- --> <!-- view: Button --> <dimen name="btn_default_height">56dp</dimen> <dimen name="btn_default_background_height">88dp</dimen> <dimen name="btn_default_background_height_large">120dp</dimen> <dimen name="btn_login_external_width">0.28</dimen> <dimen name="btn_login_external_height">40dp</dimen> <!-- --> <!-- view: Textview --> <dimen name="tv_dropdown_height">54dp</dimen> <!-- --> <!-- view: Progressbar --> <dimen name="def">wrap_content</dimen> <dimen name="abc">wrap_content</dimen> <!-- --> <!-- view: Layout --> <dimen name="cl_shop_item_description">56dp</dimen> <!-- --> </resources>
sw600维度dimen配置
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- font size --> <dimen name="font_text_headline_largest">40sp</dimen> <dimen name="font_text_headline_large">24sp</dimen> <dimen name="font_text_headline">22sp</dimen> <dimen name="font_text_large">20sp</dimen> <dimen name="font_text_normal">18sp</dimen> <dimen name="font_text_small">17sp</dimen> <dimen name="font_text_smallest">16sp</dimen> <!-- --> <!-- spacing --> <dimen name="spacing_normal">16dp</dimen> <!-- --> <!-- view: Cardview --> <dimen name="cv_home_width">0.28</dimen> <dimen name="cv_home_height">0.32</dimen> <dimen name="cv_service_flow_width">0.30</dimen> <dimen name="cv_service_message_height">265dp</dimen> <dimen name="cv_service_option_height">265dp</dimen> <!-- --> <!-- view: Imageview --> <dimen name="iv_logo_width">250dp</dimen> <dimen name="iv_shop_height">0.6</dimen> <dimen name="iv_service">100dp</dimen> <dimen name="iv_drawable_height">24dp</dimen> <dimen name="iv_drawable_width">24dp</dimen> <!-- --> <!-- view: Button --> <dimen name="btn_default_height">72dp</dimen> <dimen name="btn_default_background_height">124dp</dimen> <dimen name="btn_default_background_height_large">160dp</dimen> <dimen name="btn_login_external_height">60dp</dimen> <!-- --> <!-- view: Textview --> <dimen name="tv_dropdown_height">60dp</dimen> <!-- --> <!-- view: Progressbar --> <dimen name="def">75dp</dimen> <dimen name="abc">24dp</dimen> <!-- --> <!-- view: Layout --> <dimen name="cl_shop_item_description">72dp</dimen> <!-- --> </resources>
报错指向的无效资源
appcompat相关
<color name="tooltip_background_light">#e6FFFFFF</color>
drawerlayout相关
<attr format="dimension" name="elevation"/>
补充说明
类似cv_home_width、cv_service_flow_width这类纯数值的dimen不是缺少dp单位,它们是用于app:layout_constraintHeight_percent属性的参数。
排查解决步骤
- 修正dimen中的非法值
默认dimen中定义的<dimen name="def">wrap_content</dimen>和<dimen name="abc">wrap_content</dimen>属于非法配置:dimen类型资源只能存放带单位的数值,wrap_content是布局属性的枚举值,不能放到dimen中定义,直接删除这两个配置即可。 - 修正无单位百分比值的资源类型
所有用于百分比布局属性的纯小数值,不能用dimen类型定义,dimen要求必须附带单位,否则会被判定为无效资源。将这类配置改为float类型即可:
<!-- 错误写法 --> <dimen name="cv_home_width">0.30</dimen> <!-- 正确写法 --> <item name="cv_home_width" type="float">0.30</item>
使用时对应调整引用为@float/cv_home_width即可正常传给百分比属性。
3. 清理缓存重新构建
执行以下操作清理所有缓存,避免历史错误缓存影响构建:
- 执行项目清理命令:
./gradlew clean - 删除本地gradle缓存目录下对应transforms缓存(也就是报错里指向的
.gradle/caches/transforms-3目录内容) - 重新执行构建操作
- 额外校验
检查所有dimen配置是否存在其他格式错误,比如单位拼写错误、数值格式异常等问题。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

