我正在尝试将Android Studio项目中的appcompat-v7从v20.0.0更新为21.0.0以使用材料设计组件,但我总是得到同样的错误:
"错误:属性"颜色"已经定义了#34;
我不知道如何解决此错误,我在网上搜索但我无法得到答案。 这是我的傻瓜:
android {
compileOptions.encoding = "iso-8859-1"
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
applicationId "com.test"
minSdkVersion 11
targetSdkVersion 22
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:support-v4:20.0.0'
compile 'com.google.http-client:google-http-client-gson:1.19.0'
compile 'com.google.code.gson:gson:2.2.4'
compile "com.android.support:appcompat-v7:21.0.+"
}
这是冲突存在的路径
C:\Users\Abel Dominguez\Documents\PROYECTOS_ANDROID\definitivos\d2\app\build\intermediates\exploded-aar\com.android.support\appcompat-v7\21.0.3\res\values\values.xml
这是另一个错误:
Error:Execution failed for task ':app:processDebugResources'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
C:\Users\Abel Dominguez\AppData\Local\Android\sdk1\build-tools\build-tools-21.1.1\aapt.exe package -f --no-crunch -I C:\Users\Abel Dominguez\AppData\Local\Android\sdk1\platforms\android-21\android.jar -M C:\Users\Abel Dominguez\Documents\PROYECTOS_ANDROID\definitivos\d2\app\build\intermediates\manifests\full\debug\AndroidManifest.xml -S C:\Users\Abel Dominguez\Documents\PROYECTOS_ANDROID\definitivos\d2\app\build\intermediates\res\debug -A C:\Users\Abel Dominguez\Documents\PROYECTOS_ANDROID\definitivos\d2\app\build\intermediates\assets\debug -m -J C:\Users\Abel Dominguez\Documents\PROYECTOS_ANDROID\definitivos\d2\app\build\generated\source\r\debug -F C:\Users\Abel Dominguez\Documents\PROYECTOS_ANDROID\definitivos\d2\app\build\intermediates\res\resources-debug.ap_ --debug-mode --custom-package com.wherefriend -0 apk --output-text-symbols C:\Users\Abel Dominguez\Documents\PROYECTOS_ANDROID\definitivos\d2\app\build\intermediates\symbols\debug
Error Code:
1
Output:
C:\Users\Abel Dominguez\Documents\PROYECTOS_ANDROID\definitivos\d2\app\build\intermediates\res\debug\values\values.xml:94: error: Attribute "color" has already been defined
答案 0 :(得分:14)
我在阅读@petey的答案后解决了我的问题。如果查看错误消息中显示的行,您可以精确地确定导致问题的属性。
就我而言,它是自定义color
xml文件中名为attrs
的属性。那个自定义视图没有被使用,所以我只是评论说线和问题已经解决了。
可能的解决方案步骤
检查错误输出以查找导致问题的文件和行号的路径
通过文件系统资源管理器转到该文件并查找有问题的行
该行应该提到(自定义)视图具有已在某处定义的属性。
返回IDE中的项目,找到该属性,如果没有使用注释,否则如果使用了,请更改它的名称。
答案 1 :(得分:3)
您应该删除此行
compile 'com.android.support:support-v4:20.0.0'
并使用appcompat使用的相同依赖项:
compile 'com.android.support:support-v4:21.0.+'
另外我建议修复21.0.3而不是21.0。+
答案 2 :(得分:0)
Gradle Resource Merger 合并所有依赖项中的所有资源文件夹并放入单个文件夹中。如果存在重复,则构建过程将失败。
幸运的是,如果你看下面的输出:标签,你会找到解决问题的正确途径。
这是一个例子
在您的情况下是android-support-v7-appcompat\res\values\attrs.xml:476: error: Attribute "attributeName" has already been defined
您还可以从命令行构建项目并获取正确的路径。 attributeName在第476行的values \ attrs.xml文件中,您会找到名为" attributeName"的属性。最有可能是你自己的风格,你必须改变,以摆脱重复。
现在,当您知道原因时,可以在项目模块中找到该属性,并用不同的名称替换它。
答案 3 :(得分:0)
在某些情况下,这可能会对您有所帮助。这不是一个具体的答案。
tools:attr markers
在任何特定元素上都可以有许多与属性相关的标记来解析冲突中的所有属性。
<tools:strict=”x, y, z”>
属性的默认隐式模式,在尝试使用不同值的合并低优先级属性声明时生成错误。
<tools:remove=”x, y, z”>
合并时从任何低优先级声明中删除x,y,z属性。
<tools:replace=”x, y, z”>
将任何低优先级声明中的x,y,z属性替换为提供的值(必须存在于同一节点上)。