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

将我的 Studio 从 0.3.7 更新到 0.4.0 后,我无法编译我的项目。我在stackoverflow上找到了解决方案: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 文件中。所有工作都很完美=)

标签: android gradle android-gradle-plugin


【解决方案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 的新可用版本中修复
              猜你喜欢
              • 2016-10-01
              • 2017-10-07
              • 2015-11-01
              • 2015-02-14
              • 2016-12-13
              • 1970-01-01
              • 2015-03-14
              • 2016-08-10
              相关资源
              最近更新 更多