Android Studio 0.4在APK META-INF / LICENSE.txt中复制的重复文件

时间:2013-12-29 17:14:51

标签: android gradle android-gradle

在我将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中开发

13 个答案:

答案 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-jwtjackson-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 "**"
    }
}