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

Posted

技术标签:

【中文标题】Android Studio 0.4 在 APK META-INF/LICENSE.txt 中复制的重复文件【英文标题】:Android Studio 0.4 Duplicate files copied in APK META-INF/LICENSE.txt 【发布时间】:2014-01-16 15:37:01 【问题描述】:

将我的 Studio 从 0.3.7 更新到 0.4.0 后,我无法编译我的项目。我在***上找到了解决方案:Duplicate files copied (android Studio 0.4.0)

我将我的项目更新到 gradle 0.7.+,但我不知道我必须将下一个字符串放在哪里:

android 

    packagingOptions 
       exclude 'META-INF/LICENSE.txt'
    

我的日志猫:日志

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

附:在ubuntu 13.04开发

【问题讨论】:

android部分内 谢谢。我将块 PackagingOptions() 放在主 gradle conf 文件中。首先,我将此块插入到库 gradle 文件中。所有工作都很完美=) 【参考方案1】:
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 文件中添加并同步项目

【讨论】:

【参考方案2】:

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

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

android  
    ....
    packagingOptions 
        // Allow the compilation process to choose the dependencies for us.
        pickFirst "**"
    

【讨论】:

【参考方案3】:

我只加了2:

android

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


【讨论】:

这是否仍会包含在应用程序生产中?【参考方案4】:

将依赖项放在顶部,将 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。获取信息。

【讨论】:

@Andree 我们排除文件的原因是因为我们不希望 .txt(和其他)文件包含在构建将生成的 .apk 中。 在 android 之外无法识别排除:/ Exclude 应该在 android 内,然后才有效。 !此解决方案违反了所有开源许可证!因为您有义务将每个库的原始许可文本添加到您的包中 嗨。任何。几乎所有操作系统许可证都包含在您的项目中“包含许可证副本”的义务。因此,这意味着您必须在项目中包含您使用的所有操作系统许可证的副本。通过在 gradle 中“排除”它们,您违反了许可证。【参考方案5】:

这将帮助您解决问题

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'

【讨论】:

如果与正确答案基本相同,为什么会有这么多反对意见?【参考方案6】:

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

【讨论】:

【参考方案7】:

您可以通过将以下代码添加到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 年前就已经解决了 感谢您的回答 :-) 我今天刚遇到这个问题,发现了这个帖子。而且我没有注意到日期。 您没有注意到日期并忽略了所有其他答案。【参考方案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/LICENSE 中复制的文件重复

然后添加

 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 也存在此错误)

【讨论】:

【参考方案9】:

注意!!可能违反开源许可。

按照上面的建议排除 license.txt 文件,您可能会违反一些开源许可,因为开源许可中的一个共同点是同意将其添加到您的源代码中。 最好检查您的开源许可证。

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

packagingOptions 
   pickFirst  'META-INF/license.txt'

这样你至少履行了部分许可义务

【讨论】:

【参考方案10】:

添加:

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

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

【讨论】:

【参考方案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 个小时。 :) 是 packagingOptions exclude 'libs/jackson...' 修复了它。【参考方案12】:

添加

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

在 build.gradle 中

【讨论】:

我们这样违反了开源许可证【参考方案13】:

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

【讨论】:

嗨,我很久以前通过添加 packingOptions() 解决了这个问题。感谢您的回答)+1 此问题已在 AS 的新可用版本中修复

以上是关于Android Studio 0.4 在 APK META-INF/LICENSE.txt 中复制的重复文件的主要内容,如果未能解决你的问题,请参考以下文章

android studio生成apk在哪?

android studio怎样生成apk文件

android studio 打包的apk在哪

怎么用android studio生成apk文件

Android Studio 没有 Generate Signed APK

android studio怎样运行打包后的apk