【问题标题】:Android Gradle Duplicate files copied in APK META-INF/license.txtAndroid Gradle 在 APK META-INF/license.txt 中复制的重复文件
【发布时间】:2016-10-01 21:24:48
【问题描述】:

我将向我的 Android 应用程序添加 Spring 的 RESTful Web 服务支持,如https://spring.io/guides/gs/consuming-rest-android/ 所述。

这是* build.gradle 配置:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

这是我的app/build.gradle 配置:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.example"
        minSdkVersion 8
        targetSdkVersion 17
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }

    dependencies {
        compile 'com.android.support:appcompat-v7:+'
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'org.springframework.android:spring-android-rest-template:1.0.1.RELEASE'
        compile 'com.fasterxml.jackson.core:jackson-databind:2.3.2'
    }

    packagingOptions {
        exclude 'META-INF/NOTICE' // will not include NOTICE file
        exclude 'META-INF/LICENSE' // will not include LICENSE file
    }

}

现在它失败并出现以下错误:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/license.txt
    File1: user\.gradle\caches\modules-2\files-2.1\org.springframework.android\spring-android-rest-template\1.0.1.RELEASE\e132d929bd181941f79b0d63edafb8a86ae6fd33\spring-android-rest-template-1.0.1.RELEASE.jar
    File2: user\.gradle\caches\modules-2\files-2.1\org.springframework.android\spring-android-core\1.0.1.RELEASE\e68f0e8e4b636ee30c4de58953be38d9b72a5e3b\spring-android-core-1.0.1.RELEASE.jar

我做错了什么以及如何解决?

【问题讨论】:

标签: android gradle spring-android


【解决方案1】:

在您的应用级 gradle 文件中写入以下行

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

【讨论】:

  • 我已经用这些行更新了我的问题..由于某种原因它没有帮助
  • 有人能解释一下这些行的作用吗
  • 从项目中删除重复文件
  • 花了两个小时试图让我的测试在我的 android 项目上运行。
  • 它不会删除“重复”文件。它会排除列出的文件而不进行任何进一步的检查。在大多数情况下,这种“解决方案”是非法的。
【解决方案2】:

如果所选答案中的解决方案不能解决您的问题,请尝试添加

    exclude 'META-INF/ASL2.0'

也是。或者基本上,确定重复文件的名称并将其排除。上面的添加为我解决了这个问题。

【讨论】:

    【解决方案3】:

    它对我有帮助。试试这个代码:)

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

    【讨论】:

      【解决方案4】:

      添加这些行对我有帮助。

      shadowJar {
          // Filtering shadow jar contents by file pattern.
          exclude 'schemaorg_apache_xmlbeans/attribute/**'
          exclude 'schemaorg_apache_xmlbeans/attributegroup/**'
          exclude 'schemaorg_apache_xmlbeans/element/**'
          exclude 'schemaorg_apache_xmlbeans/identityconstraint/**'
          exclude 'schemaorg_apache_xmlbeans/javaname/**'
          exclude 'schemaorg_apache_xmlbeans/modelgroup/**'
          exclude 'schemaorg_apache_xmlbeans/namespace/**'
          exclude 'schemaorg_apache_xmlbeans/src/**'
          exclude 'schemaorg_apache_xmlbeans/system/sXML*/**'
          exclude 'schemaorg_apache_xmlbeans/system/s8C3F193EE11A2F798ACF65489B9E6078/**'
          exclude 'schemaorg_apache_xmlbeans/type/**'
      
          exclude 'repackage/**'
      
          exclude 'LICENSE.txt'
          exclude 'NOTICE.txt'
          exclude 'META-INF/LICENSE'
          exclude 'META-INF/LICENSE.txt'
          exclude 'META-INF/NOTICE'
          exclude 'META-INF/NOTICE.txt'
          exclude 'META-INF/maven/**'
      
          // these are only needed when handling Visio files, remove it if you would like to use Visio support
          dependencies {
              exclude(dependency('com.github.virtuald:curvesapi'))
              exclude(dependency('commons-codec:commons-codec'))
          }
      
          // Relocate javax dependencies so Android does not choke
          relocate 'javax.xml.namespace', 'org.apache.poi.javax.xml.namespace'
          relocate 'javax.xml.stream', 'org.apache.poi.javax.xml.stream'
          relocate 'javax.xml.XMLConstants', 'org.apache.poi.javax.xml.XMLConstants'
      }
      

      【讨论】:

        【解决方案5】:

        这个对我有用:

            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'
            exclude 'META-INF/spring.schemas'
            exclude 'META-INF/spring.tooling'
            exclude 'META-INF/INDEX.LIST'
            exclude 'META-INF/spring.handlers'
        }
        configurations {
            all*.exclude module: 'classworlds'
            all*.exclude module: 'commons-logging'
            all*.exclude module: 'httpclient'
            all*.exclude module: 'maven-artifact'
            all*.exclude module: 'maven-artifact-manager'
            all*.exclude module: 'maven-error-diagnostics'
            all*.exclude module: 'maven-model'
            all*.exclude module: 'maven-project'
            all*.exclude module: 'maven-settings'
            all*.exclude module: 'plexus-container-default'
            all*.exclude module: 'plexus-interpolation'
            all*.exclude module: 'plexus-utils'
            all*.exclude module: 'wagon-file'
            all*.exclude module: 'wagon-http-lightweight'
            all*.exclude module: 'wagon-provider-api'
        
        }
        

        【讨论】:

          最近更新 更多