在我将Studio从0.3.7更新到0.4.0之后,我无法编译我的项目。我在stackoverflow上找到了一个解决方案:Duplicate files copied (Android Studio 0.4.0)
我将我的项目更新为graged 0.7。+,但我不知道我必须把下一个字符串放在哪里:
android {
packagingOptions {
exclude 'META-INF/LICENSE.txt'
}
}
我的logcat:log
Execution failed for task ':Prog:packageDebug'.
> Duplicate files copied in APK META-INF/LICENSE.txt
File 1: /home/scijoker/AndroidStudioProjects/ProgProject/Prog/libs/httpclient-4.1.1.jar
File 2: /home/scijoker/AndroidStudioProjects/ProgProject/Prog/libs/httpclient-4.1.1.jar
P.S。在ubuntu 13.04中开发
答案 0 :(得分:154)
将dependecies放在顶部,最后的packageOptions为我工作。
apply plugin: 'android'.
这是我在app文件夹中的完整build.gradle。
dependencies {
compile 'com.android.support:support-v4:+'
compile files('libs/apache-mime4j-0.6.jar')
compile files('libs/httpmime-4.0.jar')
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
defaultConfig {
minSdkVersion 7
targetSdkVersion 10
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard- rules.txt'
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
}
}
编辑:几乎所有操作系统许可证都包含“在您的项目中包含许可证副本”的义务。这意味着,您必须包含您在项目中使用的所有操作系统许可证的副本。通过在gradle中“排除”它们,您违反了许可证。
从项目中排除它们可能不是最佳选择。 谢谢R.S.信息。
答案 1 :(得分:46)
注意!!可能违反OpenSource许可证。
如上所述排除license.txt文件,您可能违反了一些开源许可证,因为这是开源许可证中的一个共同点,即同意将其添加到您的来源。 更好地检查您的开源许可证。
<强>更新强> 在有更好的解决方案之前,请使用
packagingOptions {
pickFirst 'META-INF/license.txt'
}
像这样,你至少可以履行许可义务的一部分
答案 2 :(得分:23)
只需添加
android {
packagingOptions {
exclude 'META-INF/LICENSE.txt'
}
}
build.gradle中的
答案 3 :(得分:16)
您可以通过将以下代码添加到project/app/build.gradle
来修复它:
android {
// Fixed build error : Duplicate files copied in APK META-INF/xxx
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE.txt'
}
}
答案 4 :(得分:11)
我遇到了与新版gradle相同的问题, build.gradle 文本格式对我有用:
我的libs文件夹中有两个jackson jar。
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.omtlab.myapplication"
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'libs/jackson-core-asl-1.9.13.jar'
exclude 'libs/jackson-mapper-asl-1.9.13.jar'
exclude 'META-INF/ASL2.0'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
}
dependencies {
//compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:21.0.3'
compile files('libs/jackson-core-asl-1.9.13.jar')
compile files('libs/jackson-mapper-asl-1.9.13.jar')
}
答案 5 :(得分:8)
添加:
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
}
为我工作,biniam_Ethiopia的解决方案可能是最安全的
答案 6 :(得分:8)
插入此代码时
android{
packagingOptions{
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
}
}
确定 如果在错误中显示
&GT;在APK META-INF / LICENSE.txt
中复制的重复文件
然后添加
android{
packagingOptions{
exclude 'META-INF/LICENSE.txt'
}
}
如果在错误中显示
&GT;在APK META-INF / LICENSE
中复制的重复文件
然后添加
android{
packagingOptions{
exclude 'META-INF/LICENSE'
}
}
如果在错误中显示
&GT;在APK META-INF / license.txt
中复制的重复文件
然后添加
android{
packagingOptions{
exclude 'META-INF/license.txt'
}
}
简而言之,CASE和文档格式(.txt)非常重要。
(Android Studio 1.1.0中也存在此错误)
答案 7 :(得分:6)
这将帮助您解决问题
packagingOptions {
exclude 'META-INF/ASL2.0'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/DEPENDENCIES'
}
答案 8 :(得分:4)
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
}
添加build.gradle文件和syn项目
答案 9 :(得分:3)
我只需添加2:
android{
packagingOptions{
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/LICENSE'
}
}
答案 10 :(得分:2)
我遇到了类似的错误,并在没有packingOptions()
和exclude
函数的情况下解决了它。我添加了两个依赖项,但其中一个是第一个的子组。这导致了错误,一旦我删除了其中一个,我得到了一个干净的构建。我建议在依赖块中检查类似的错误。
答案 11 :(得分:2)
使用java-jwt
和jackson-core
时,请使用以下内容:
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.properties")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.xml")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.properties")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.xml")
答案 12 :(得分:1)
这可能是一种不好的做法,但是如果你包含多个大型库,你可能会发现自己正在处理数百种这类冲突。
下面列出了针对此类情况的超级简单修复:
android {
....
packagingOptions {
// Allow the compilation process to choose the dependencies for us.
pickFirst "**"
}
}