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


115

将Studio从0.3.7更新到0.4.0后,我无法编译项目。我找到了一个关于stackoverflow的解决方案:复制了重复的文件(Android Studio 0.4.0)

我将项目更新为gradle 0.7。+,但是我不知道接下来的字符串应该放在哪里:

android {

    packagingOptions {
       exclude 'META-INF/LICENSE.txt'
    }
}

我的logcat:日志

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

PS开发在Ubuntu 13.04中


2
内部android部分
Eugen Martynov 2013年

谢谢。我将块包装选项()放在主gradle conf文件中。首先,我将此块插入到了gradle文件中。所有工作都完美=)
a.black13

Answers:


155

将依赖项放在顶部,将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'
    }
}

编辑:几乎所有OS许可证都包含将“包含许可证副本”添加到您的项目中的义务。因此,这意味着您必须在项目中包含使用的所有OS许可证的副本。通过将它们“排除”在gradle中,就违反了许可证。

从项目中排除它们可能不是最佳选择。谢谢RS的信息。


2
@Andree排除文件的原因是因为我们不希望将.txt(和其他)文件包含在由构建生成的.apk中。
biniam 2014年

4
在android {}之外无法识别排除:/
An-droid

4
排除项应位于android {}内部,然后才能正常工作。
Pavan Pyati 2015年

2
!该解决方案违反了所有开源许可证!由于您有义务将每个库的原始许可证文本添加到您的软件包中
RS

2
你好 任何。几乎所有OS许可证都包含将“包含许可证副本”添加到您的项目中的义务。因此,这意味着您必须在项目中包含使用的所有OS许可证的副本。通过将它们“排除”在gradle中,就违反了许可证。
RS

47

注意!!可能违反OpenSource许可证。

如上所述排除了license.txt文件后,您可能会违反某些开源许可证,因为同意将其添加到您的源代码中,这是开源许可证中的一个常见问题。更好地检查您的开源许可证。

更新: 在找到更好的解决方案之前,请使用

packagingOptions {
   pickFirst  'META-INF/license.txt'
}

这样,您至少要履行部分许可义务


23

只需添加

android {
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
    }
}

在build.gradle中


我们违反了这样的开源许可证
RS

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'
    }
}

你好 此问题已在1.5年前解决,谢谢您的回答
a.black13

:-)我今天刚遇到这个问题,找到了这个线程。我不知道日期。
AlfredZhong

您没有注意到日期,而忽略了所有其他答案。
令人难以置信的

11

我遇到了与新版本的gradle相同的问题,在build.gradle下面文本格式对我:

我的libs文件夹中有两个杰克逊罐子。

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个小时。:) packagingOptions { exclude 'libs/jackson...' }是固定的。
CJBrew

8

新增:

packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/NOTICE.txt'
}

为我工作,biniam_Ethiopia的解决方案可能是最安全的方法


8

在插入此代码时

android{

packagingOptions{
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/license.txt'
 }
}

请确认如果错误则显示

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

然后加

 android{

packagingOptions{
    exclude 'META-INF/LICENSE.txt'
 }

}

如果错误,则显示

>在APK META-INF / 许可中复制的重复文件

然后加

 android{

packagingOptions{
    exclude 'META-INF/LICENSE'
 }

}

如果错误,则显示

>复制到APK META-INF / license.txt中的重复文件

然后加

 android{

packagingOptions{
    exclude 'META-INF/license.txt'
 }

}

简而言之,CASE和文档FORMAT(.txt)是如此重要。

(此错误也存在于Android Studio 1.1.0中)


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'
}

如果与正确答案基本相同,为什么会有这么多否决票?
Necronet '16

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项目


3

我只添加2:

android{

packagingOptions{
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/LICENSE'
 }

}

应用程序制作中还会包括吗?
RoCk RoCk

2

我有一个类似的错误,没有packingOptions()and exclude函数就解决了。我添加了两个依赖项,但是一个依赖项是第一个的子组。这导致了错误,一旦我删除了其中一个,我就得到了一个干净的版本。我建议在依赖块中检查类似的错误。


嗨,我很久以前通过添加packingOptions()解决了这个问题。感谢您的回答)+1
a.black13

此问题已在AS的新可用版本中得到了解决
2014年

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")

2

这很可能是不好的做法,但是,如果包含多个大型库,则可能会发现自己正在经历数百种此类冲突。

下面列出的是针对此类情况的超级简单修复程序:

android { 
    ....
    packagingOptions {
        // Allow the compilation process to choose the dependencies for us.
        pickFirst "**"
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.