오류 :: APK 패키징 중 파일 복제


144

안드로이드 스튜디오. 응용 프로그램을 실행하는 동안 이런 종류의 오류가 발생합니다.

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


2
중복되지 않습니다! 다른 질문자들은 exlude 옵션을 추가하여 오류를 수정했습니다. 그러나 모두 알 수 있듯이 이러한 옵션을 추가했는데 문제가 사라지지 않았습니다.
Robertas Setkus


이 문제에 대해 어떤 생각이 stackoverflow.com/questions/30364950/...은
Jithu PS

그것은 내 welll을 해결했다. 감사합니다
Reshma

답변:


56

문자열 비교는 대소 문자를 구분한다고 생각합니다. 와 시도exclude 'META-INF/notice.txt'


내 대답은 notice.txt대신 에 시도하는 것이 었습니다 NOTICE.txt. 오류는 실제로 제외가 발생하는 오류와 다르게 보입니다. 에 META-INF/notice.txt파일이 src/main/resources/있습니까?
Xavier Ducrohet

미안 Xavier. 그때 당신의 대답을 이해하지 못했습니다. 이제 무슨 말인지 알 수 있습니다. 로 변경하려고 exclude 'META-INF/notice.txt'했지만 콘솔에서 메시지를 표시했습니다 Duplicate files copied in APK META-INF/NOTICE.txt. 이상하지 않습니까? resources아래에 디렉토리 가 없습니다 C:\PathToAndroidStudioProject\src\main.
Robertas Setkus

1
exclude 'META-INF/notice.txt'과를 모두 넣으면 exclude 'META-INF/NOTICE.TXT'작동합니까?
Xavier Ducrohet

감사. 도움이되었습니다. :)
Robertas Setkus

1
'android'부분의 build.gradle 파일에서 다음을 추가하십시오. packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' }
Krystian

22

나는 당신이 build.gradle에 다음 옵션 만 포함해야한다고 생각합니다 .

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

1
마지막으로 이것을 구현 한 후에이 쿼리를 해결했습니다. Thanks man :)
Hardik Joshi

10

짧은 답변:

사용하여 자세한 gradle 출력을 gradle assemble보고 중복 된 파일을 확인하고 다음을 사용하여 제외하십시오.

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

중복 파일 (LICENSE)을 시작한 종속성 목록도 표시합니다. 출력에서 Origin #이 있는 행을보십시오 .


이 문제에 대한 아이디어가
있습니까?

1
나는 그것이 나에게 맞는 것이었지만 당신의 대답을 거의 무시했습니다. 나는 게시물의 맨 위에 답변을 배치하는 것이 좋습니다 : android {packagingOptions {exclude 'LICENSE'}} 다음에 설명과 긴 gradle 출력 (대부분 대답과 관련이 없습니다.이 부분은 해당 파일을 무시할 수 있음) build.gradle에서 : android {packagingOptions {제외 'LICENSE'}}
gorbysbm

끝난. 고마워 @gorbysbm.
Shubham Chaudhary

6

이것을 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'
}
}

3

하나 이상의 오류입니다. 맞습니다.

아래에 apply plugin: 'android-library'

이거 추가 해봐 :: android { packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' } }

첫 번째 오류는 파일 복제에 의한 것이고 두 번째 오류는 LICENSE 및 NOTICE 파일에 의한 것입니다. 그것은 후에 작동합니다

편집 : : 문제 식별에 대한 내 게시물을 참조하십시오 : : 안드로이드 Gradle 플러그인 0.7.0 : "PK를 포장하는 동안 파일 복제"


이 문제에 대한 아이디어가
있습니까?

1

이것은 나를 위해 작동

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

1

흥미롭게도, gradle 에서이 줄을 삭제 했을 때 작동했습니다.

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

0

packagingOptions에 적합한 위치를 찾기 위해 조금 놀아야했습니다. jackson-core : 2.2.2jackson-databind : 2.2.2 의 충돌에 대한 중복 파일 문제 해결 DSL도 최근에 변경된 것 같습니다. 따라서 최신 Android Studio 1.4.1의 buildTools 23에서는 android를 넣어야합니다. compileOptions와 동일한 레벨에 패키징 옵션이 있으며 {android { braces!

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
   }
} 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.