【问题标题】:Error :: duplicate files during packaging of APK错误 :: 打包 APK 时出现重复文件
【发布时间】:2014-04-23 09:52:36
【问题描述】:

Android 工作室。我在应用程序运行期间遇到这种错误。

Error:Execution failed for task ':app:packageDebug'. Duplicate files copied in APK META-INF/notice.txt

build.gradle

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.1"

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

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:19.0.1'
    compile 'com.j256.ormlite:ormlite-android:4.48'
    compile 'org.codehaus.jackson:jackson-core-asl:1.9.13'
    compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
    compile 'com.octo.android.robospice:robospice:1.4.11'
    compile 'com.octo.android.robospice:robospice-spring-android:1.4.11'
}

我该如何解决这个错误?

已编辑

这些排除选项解决了我的问题:

packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
    }

【问题讨论】:

标签: android android-gradle-plugin


【解决方案1】:

我认为字符串比较区分大小写。试试exclude 'META-INF/notice.txt'

【讨论】:

  • 我的回答是尝试使用notice.txt 而不是NOTICE.txt?尽管错误看起来实际上与发生排除的错误不同。您的src/main/resources/ 中有META-INF/notice.txt 文件吗?
  • 对不起泽维尔。我当时没看懂你的回答。现在我明白你的意思了。我试图更改为exclude 'META-INF/notice.txt',但随后控制台提示Duplicate files copied in APK META-INF/NOTICE.txt。奇怪,不是吗? C:\PathToAndroidStudioProject\src\main下没有resources目录。
  • 如果你把exclude 'META-INF/notice.txt'exclude 'META-INF/NOTICE.TXT'都放了,能用吗?
  • 谢谢。这有帮助。 :)
  • 在'android'部分的build.gradle文件中,尝试添加:packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' }
【解决方案2】:

简答:

使用gradle assemble 和查看详细的 gradle 输出 记下重复的文件并使用以下命令排除它们:

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

长答案:

从命令行运行assemble gradle 任务以获得详细输出:

./gradlew assemble || gradle assemble

这会自动显示要排除的内容:

studioWorkspace/CCDroid git:(master) ✗ ± ./gradlew assembleDebug
:app:preBuild
:app:compileDebugNdk UP-TO-DATE
:app:preDebugBuild
:app:checkDebugManifest
:app:preReleaseBuild
:app:prepareComAndroidSupportAppcompatV72200Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42200Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJava UP-TO-DATE
:app:preDexDebug UP-TO-DATE
:app:dexDebug UP-TO-DATE
:app:processDebugJavaRes UP-TO-DATE
:app:validateDebugSigning
:app:packageDebug
Error: duplicate files during packaging of APK /Users/shubham/code/studioProjects/CCDroid/app/build/outputs/apk/app-debug-unaligned.apk
    Path in archive: LICENSE
    Origin 1: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.14.8/8ac073941721e0b521ec8e8bad088b1e7b8cd332/lombok-1.14.8.jar
    Origin 2: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.mockito/mockito-all/1.8.4/5c97d8b6e715ed941aeb93d6fc401ab3eb18a566/mockito-all-1.8.4.jar
You can ignore those files in your build.gradle:
    android {
      packagingOptions {
        exclude 'LICENSE'
      }
    }
:app:packageDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:packageDebug'.
> Duplicate files copied in APK LICENSE
    File 1: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.14.8/8ac073941721e0b521ec8e8bad088b1e7b8cd332/lombok-1.14.8.jar
    File 2: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.14.8/8ac073941721e0b521ec8e8bad088b1e7b8cd332/lombok-1.14.8.jar


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 11.863 secs

在输出中查看这部分:

android {
  packagingOptions {
    exclude 'LICENSE'
  }
}

它甚至显示源自重复文件(许可证)的依赖项列表。查看输出中带有 Origin # 的行。

【讨论】:

  • 有没有关于这个问题的想法stackoverflow.com/questions/30364950/…
  • 我几乎忽略了你的答案,尽管它对我来说是正确的。我建议将答案放在帖子的顶部:android { PackagingOptions { exclude 'LICENSE' } },然后是解释和长 gradle 输出(这与答案大多无关。这部分是你可以忽略那些文件在您的 build.gradle 中: android { PackagingOptions { exclude 'LICENSE' } }
  • 完成。非常感谢@gorbysbm。
【解决方案3】:

不止一个错误,你是对的。

apply plugin: 'android-library'

添加这个 :: android { packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' } }

第一个错误是文件重复,第二个是许可证和通知文件。 它会在之后工作

编辑:: 在这里查看我关于识别问题的帖子:: Android Gradle plugin 0.7.0: "duplicate files during packaging of APK"

【讨论】:

【解决方案4】:

我认为您只需要在 build.gradle 中包含这些选项:

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

【讨论】:

  • 最后在实现这个之后,我解决了这个查询。谢谢人:)
【解决方案5】:

将此添加到您的 build.gradle 文件中...

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

像这样……

android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
    applicationId "your package name"
    minSdkVersion 14
    targetSdkVersion 25
    versionCode 30
    versionName "3.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
packagingOptions {
    exclude 'META-INF/NOTICE' // will not include NOTICE file
    exclude 'META-INF/LICENSE' // will not include LICENSE file
    exclude 'META-INF/DEPENDENCIES' // will not include LICENSE file
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
}
}

【讨论】:

    【解决方案6】:

    这对我有用

    android {
    ...
    
        packagingOptions {
            exclude 'META-INF/DEPENDENCIES'
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/LICENSE.txt'
            exclude 'META-INF/NOTICE.txt'
            exclude 'META-INF/ASL2.0'
            exclude 'META-INF/notice.txt'
            exclude 'META-INF/license.txt'
        }
    }
    

    【讨论】:

      【解决方案7】:

      有趣的是,当我从 gradle 中删除这一行时,它起作用了:

      compile 'org.apache.commons:commons-lang3:3.3.1'
      

      【讨论】:

        【解决方案8】:

        我不得不四处寻找包装选项的正确位置。解决 jackson-core:2.2.2jackson-databind:2.2.2 之间冲突的重复文件问题 最近 DSL 似乎也发生了变化 因此,在最近的带有 buildTools 23 的 Android Studio 1.4.1 中,您必须将 android.packaging 选项放在与 compileOptions 相同的级别,而不是放在任何 model { android { 大括号内!

        model { 
           android {
                compileSdkVersion = 21
                buildToolsVersion = "23.0.1"
        
                defaultConfig.with {
                      applicationId = "com.android.sensorgraph"
                      minSdkVersion.apiLevel = 21
                      targetSdkVersion.apiLevel = 22
                }
           }
        
           android.packagingOptions {
                exclude 'META-INF/LICENSE'
                exclude 'META-INF/NOTICE'
           }
           compileOptions.with {
                sourceCompatibility = JavaVersion.VERSION_1_7
                targetCompatibility = JavaVersion.VERSION_1_7
           }
        } 
        

        【讨论】:

          猜你喜欢
          • 2015-12-20
          • 2015-06-21
          • 2015-08-02
          • 2015-09-18
          • 2015-12-11
          • 2016-04-28
          相关资源
          最近更新 更多