【发布时间】:2019-05-09 16:34:27
【问题描述】:
不重复
我已经阅读了很多具有“类似”问题的不同 SO 帖子,但到目前为止,我的问题还没有解决:
- Android Studio - mergeDebugResources exception
- Android Studio mergeDebugResources issue
- Ionic: Execution failed for task ':mergeDebugResources' (Some file crunching failed)
- gradlew build freezing at mergeDebugResources
- Getting mergeDebugResources error while running ionic build android
- 等
似乎这一特定步骤(mergeDebugResources)可能会以数百种不同的方式严重失败,并且从不提供有用的错误消息。充其量它不会告诉您任何信息,最坏的情况是它会为您提供误导性信息,使您在尝试调试问题时误入歧途。
我在做什么
我正在围绕 ExoPlayer 编写一个小包装器。我的包装器公开了一个自定义视图,其属性直接传递给 ExoPlayer 的PlayerView。我的自定义视图的attrs.xml 文件如下所示:
<resources>
<declare-styleable name="BFPlayer">
<!-- PlayerView attributes -->
<!-- I wish these were camelCase and not snake_case, but c'est la vie -->
<attr name="use_artwork" format="boolean" />
<attr name="default_artwork" format="reference" />
<attr name="use_controller" format="boolean" />
<attr name="hide_on_touch" format="boolean" />
<attr name="auto_show" format="boolean" />
<attr name="hide_during_ads" format="boolean" />
<attr name="show_buffering" format="enum">
<enum name="never" value="0" />
<enum name="when_playing" value="1" />
<enum name="always" value="2" />
</attr>
<attr name="resize_mode" format="enum">
<enum name="fit" value="0" />
<enum name="fixed_width" value="1" />
<enum name="fixed_height" value="2" />
<enum name="fill" value="3" />
<enum name="zoom" value="4" />
</attr>
<attr name="surface_type" format="enum">
<enum name="none" value="0" />
<enum name="surface_view" value="1" />
<enum name="texture_view" value="2" />
<enum name="spherical_view" value="3" />
</attr>
<attr name="shutter_background_color" format="color" />
<attr name="keep_content_on_player_reset" format="boolean" />
<attr name="player_layout_id" format="reference" />
<attr name="controller_layout_id" format="reference" />
<!-- BFPlayer attributes -->
<!-- snake_case to match ExoPlayer attributes -->
<attr name="video_src" format="string" />
</declare-styleable>
</resources>
发生了什么
我在尝试构建我的项目时遇到以下错误:
* What went wrong:
Execution failed for task ':app:mergeDebugResources'.
> 1 exception was raised by workers:
com.android.builder.internal.aapt.v2.Aapt2Exception: Android resource compilation failed
/Users/stevenbarnett/.gradle/caches/transforms-2/files-2.1/906c495794baffdd076b02fc420f6298/res/values/values.xml:726:5-730:25: AAPT: error: duplicate value for resource 'attr/resize_mode' with config ''.
/Users/stevenbarnett/.gradle/caches/transforms-2/files-2.1/906c495794baffdd076b02fc420f6298/res/values/values.xml:726:5-730:25: AAPT: error: resource previously defined here.
/Users/stevenbarnett/.gradle/caches/transforms-2/files-2.1/906c495794baffdd076b02fc420f6298/res/values/values.xml:726:5-730:25: AAPT: error: duplicate value for resource 'attr/surface_type' with config ''.
/Users/stevenbarnett/.gradle/caches/transforms-2/files-2.1/906c495794baffdd076b02fc420f6298/res/values/values.xml:726:5-730:25: AAPT: error: resource previously defined here.
/Users/stevenbarnett/.gradle/caches/transforms-2/files-2.1/1694e02eca6cc0cfe670672c5973bd19/res/values/values.xml:32:5-36:373: AAPT: error: duplicate value for resource 'attr/show_buffering' with config ''.
/Users/stevenbarnett/.gradle/caches/transforms-2/files-2.1/1694e02eca6cc0cfe670672c5973bd19/res/values/values.xml:32:5-36:373: AAPT: error: resource previously defined here.
/Users/stevenbarnett/Source/BluePlayer/AndroidSDK/app/build/intermediates/incremental/mergeDebugResources/merged.dir/values/values.xml: error: file failed to compile.
请注意,它在 values.xml 从第 726 行第 5 行到第 730 行第 25 列的第 726 行第 5 列到第 730 行第 25 列“以前定义”中声明了 values.xml 中定义的值。它实际上看到了相同的声明!
我试过了:
- 清理我的项目
- 使缓存失效并重新启动
- 删除我的
~/.gradle目录 - 重新安装 Android Studio
- 降级 Gradle Android 插件(从
3.4.0到3.0.0) - 升级 Gradle Android 插件(从
3.4.0到3.5.0-beta1)
我使用的是 Mac OS X(因此任何与 Windows 相关的问题都无关紧要)
我在 64 位机器上,使用 64 位构建工具
我之前已经成功构建了这个项目和许多其他项目。直到我尝试创建此 attrs.xml 文件后,问题才出现。只有enum 属性会引发错误。删除或重命名这些属性可以构建项目,但是这些是 ExoPlayer 的 PlayerView 所期望的名称,因此我无法更改它们
【问题讨论】:
标签: java android android-studio gradle