OS 독립 경로 'META-INF / LICENSE'와 함께 둘 이상의 파일이 발견되었습니다.


332

앱을 빌드하면 다음 오류가 발생합니다.

오류 : ': app : transformResourcesWithMergeJavaResForDebug'태스크에 대한 실행이 실패했습니다. OS 독립 경로 'META-INF / LICENSE'와 함께 둘 이상의 파일이 발견되었습니다.

이것은 내 build.gradle 파일입니다.

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "cn.sz.cyrus.kotlintest"
        minSdkVersion 14
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        javaCompileOptions{
            annotationProcessorOptions{
                includeCompileClasspath = true
            }
        }
        multiDexEnabled true
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    packagingOptions {
 /*       exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'*/
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:design:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1'
    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
    testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
    compile 'com.github.GrenderG:Toasty:1.2.5'
    compile 'com.orhanobut:logger:1.15'

    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'com.umeng.analytics:analytics:latest.integration'
    compile 'ai.api:libai:1.4.8'
    compile 'ai.api:sdk:2.0.5@aar'
// api.ai SDK dependencies
    compile 'com.google.code.gson:gson:2.8.0'
    compile 'commons-io:commons-io:2.4'
    compile 'com.android.support:multidex:1.0.1'
}

이 코드를 build.gradle 파일에 추가하면

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

이 오류는 해결되지만 다른 문제가 발생합니다. 이처럼 :

java.lang.NoClassDefFoundError: com.squareup.leakcanary.internal.HeapAnalyzerService
at com.squareup.leakcanary.LeakCanary.isInAnalyzerProcess(LeakCanary.java:145)
at cn.sz.cyrus.wemz.TestApplication.onCreate(TestApplication.kt:32)

이 문제를 해결하는 방법은 누구에게 있습니까?


Android 용 Google API 클라이언트 라이브러리에 액세스 할 때도 같은 문제가 발생했습니다. gradle 종속성에서 HttpClient 모듈을 제외하여 문제를 해결했습니다. 자세한 내용은 구글 문서를 참조하십시오 developers.google.com/api-client-library/java/... 와 문서 페이지 검색 ", 명시 적으로 사용되지 않는 종속성을 제외 필요할 것 안드로이드 :"
mifthi

답변:


493

이것을 yourProject/app/build.gradle안에 추가 할 수 있습니다android{}

android {      
      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'
        exclude("META-INF/*.kotlin_module") 
      }          
}

23
이것이 왜 효과가 있으며 "META-INF"의 의미가 무엇인지 설명해 주시겠습니까? 감사합니다!
Shreshth Kharbanda 님이

@CodeSlave google.github.io/android-gradle-dsl/current/ 에서 이러한 파일을 제외하지 않으면 APK에 문제가 발생 합니다. 제외 패턴과 일치하는 경로는 APK에 포함되지 않습니다. 내가 아는 전부. 이 문제에 대한 아이디어가 없습니다
Shaaban Ebrahim

11
이 질문에 대한 답변이 될 수 있지만이 답변이 문제 해결에 어떻게 도움이되는지에 대한 설명을 추가하는 것이 좋습니다. 자세한 내용 을 알아 보려면 좋은 답변작성하려면 어떻게합니까? 를 참조하십시오.
Roshana Pitigala

3
제 경우에는 또한 'META-INF / LICENSE.md'와 'META-INF / LICENSE-notice.md'를 추가해야했습니다
Klyner

1
packaginOptions 목록에 exclude ( "META-INF / *. kotlin_module") 추가
Jaspal

129

내 경우는에서만 경로 'META-INF / 종속성을'제외에 충분했다 yourProject/app/build.gradle내부 android{} . 여기있어

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}

그런 다음 프로젝트 정리 및 프로젝트 다시 작성을 수행하십시오.


11
'META-INF / DEPENDENCIES'를 제외하고 'META-INF / LICENSE'를 제외하십시오.
Pelanes

7
설명하십시오
Mohammad Ali

1
@SilSur 내 파일에서 오류가 발생하여 해당 파일을 "META-INF / proguard / androidx-annotations.pro"에 대해 동일한 오류로 지정한 파일을 제외 한 다음 제외 'META-INF / proguard / androidx-annotations'를 추가했습니다. 프로와 그 작품.
Gunavant Patel

4
이 질문에 대한 답변이 될 수 있지만이 답변이 문제 해결에 어떻게 도움이되는지에 대한 설명을 추가하는 것이 좋습니다. 자세한 내용 을 알아 보려면 좋은 답변작성하려면 어떻게합니까? 를 참조하십시오.
Roshana Pitigala

당신은 단지 gradle 파일을 동기화 할 필요가 없습니다
스티브

75

여기의 솔루션은 도움이되지 않지만 이 링크 는 도움 이되었습니다.

안드로이드 .so 파일을 추가하는 라이브러리가있는 경우 – libassmidi.so또는 libgnustl_shared.so– – 포장 할 때 gradle 에 하나만 선택하도록 지시 해야합니다. 그렇지 않으면 충돌이 발생합니다.

android {
  packagingOptions {
    pickFirst 'lib/armeabi-v7a/libassmidi.so'
    pickFirst 'lib/x86/libassmidi.so'
  }
}

Android 프로젝트에서 React Native 앱을 라이브러리로 사용할 때이 문제가 발생했습니다. 그것이 도움이되기를 바랍니다.


2
감사합니다. 단 하나의 .so 파일에서만 동일한 문제가 발생했습니다. 동일한 폴더에 gdbserver라는 다른 파일이 있으며 라이브러리의 packagingOptions를 추가 한 후 지금 작동합니다.
미스터 피쉬

1
감사합니다! 중첩 의존성으로 JNA aar가있을 때 도움이 됨
faisal00813

31

비슷한 메시지를 받았습니다

오류 : ': app : transformResourcesWithMergeJavaResForDebug'작업에 대한 실행이 실패했습니다. OS 독립 경로 'constant-values.html'과 함께 둘 이상의 파일이 발견되었습니다.

이 문제를 해결하려면 Android Studio에서 패키지 view ( 1 ) 를 활성화 한 다음 트리를 통해 라이브러리를 탐색하고 복제본을 찾습니다 ( 2 )

그런 다음 ctrl + alt + f12 (또는 RMB 메뉴) ( 3 )-문제를 일으킨 라이브러리를 찾았습니다. libs에 파일 목록을 작성하여 문제를 일으켰고 android 섹션 의 app 's build.gradle 파일에 썼습니다 . 다른 옵션은 중복 파일을 포함하는 라이브러리를 처리하는 것입니다

packagingOptions {
    exclude 'allclasses-frame.html'
    exclude 'allclasses-noframe.html'
    <..>

여기에 이미지 설명을 입력하십시오


1
"트리를 통해 라이브러리를 탐색하고 복제본을 찾는 방법"은 무엇입니까? 모든 폴더의 모든 파일을 실제로 살펴 보셨습니까?
안드로이드 개발자

1
또한 "중복 물 찾기"에 대해 혼란스러워합니다. 앱 / 라이브러리에 100 개의 하위 항목이있을 수 있습니다. 중복 항목을 찾는 방법은 무엇입니까?
Freewalker

28

기본적으로 gradle은 apk 파일을 모을 때 모든 컴파일 종속성의 내용을 복사합니다. 두 개의 다른 jar 파일에서 중복 된 파일이 있음을 알 수 있습니다. 이것은 a.txt 또는 META-INF / DEPENDENCIES와 같은 파일 일 수 있습니다. 정보 제공 목적으로 만 파일이있는 경우 아래를 사용하여 이러한 파일을 제외하는 것이 가장 좋습니다.

android{
    packagingOptions {
       exclude 'META-INF/DEPENDENCIES'
    }
}

또는 파일이 클래스 파일과 같은 필수 파일 인 경우 서로 관련된 두 개의 jar 종속성에 걸쳐 복제 된 경우 더 호환 가능한 버전으로 이러한 jar의 대안을 찾는 것이 가장 좋습니다.


내 프로젝트에 이것을 추가하면 다시 해결할 수없는 또 다른 오류가 발생합니다! 다른 해결책?
hetsgandhi

Hetvi Gandhi, 당신이보고있는 오류는 무엇입니까?
ank

20

나는 같은 문제가 있었고 이것을 시도했다.

오류 : OS 독립 경로 'META-INF / proguard / androidx-annotations.pro'에서 둘 이상의 파일을 찾았습니다.

솔루션 : 이 문제를 해결하려면 앱의 'build.gradle'에서 android {} 섹션에 추가하면됩니다.

packagingOptions {
    exclude 'META-INF/proguard/androidx-annotations.pro'
}

18

이것은 사용할 때 발생합니다

org.jetbrains.kotlinx : kotlinx- 코 루틴-코어 : 1.2.0

그리고 다음 버전에서 수정되었습니다

org.jetbrains.kotlinx : kotlinx- 코 루틴-코어 : 1.2.1


1
org.jetbrains.kotlinx : kotlinx-coroutines-core : 1.3.6의 비슷한 문제는 현재 가장 최신입니다. 다운 그레이드에 있었다
FARHAN 파텔

예, 1.3.6의 동일한 문제
Shefchenko

17

동일한 오류가 발생하여 다른 모듈에서 다른 패키지의 동일한 클래스가 포함 된 것으로 나타났습니다 .

예를 들어 하나는 androidx 패키지를 사용하고 다른 하나는 android-x를 사용했습니다.

나는 마이그레이션하여 그것을 해결 사전 - androidx 모듈 androidx 사용하여 내장 된 안드로이드 스튜디오의 특징 : "리팩터링 -> Androidx로 마이그레이션 ..." 아무것도 제외하지 않고.


상황에 따라 모듈간에 종속성이 일치하지 않는지 확인할 수 있습니다.


1
AndroidX로 마이그레이션하면 프로젝트가 중단 될 수 있으므로 현재 버전의 프로젝트를 백업 하는 것을 잊지 마십시오 !
Kathir

12

이 메시지를받는 것과 관련된 모든 답변을 읽었습니다 Android Studio.

OS 독립 경로 'META-INF / LICENSE'와 함께 둘 이상의 파일이 발견되었습니다.

그러나이 경우 클래스를 제외하는 것이 필요하지 않으므로 제외 'META-INF/DEPENDENCIES'하면됩니다 /app/build.gradle.

android{
    ...
    ...
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
    }

}

SO에 대한 수백 가지의 다른 답변에서도 마찬가지입니다
Atul

11

Studio를 Java 7에서 Java 8로 업데이트했는데이 문제가 발생했습니다. 그런 다음이 방법으로 해결했습니다.

android {
    defaultConfig {
    }
    buildTypes {
    }
    packagingOptions{
        exclude 'META-INF/rxjava.properties'
    }
}

8

내 응용 프로그램에서 다음과 같이 jar 종속성을 추가하고있었습니다.

implementation files('libs/json-simple-1.1.1.jar')

그러나 다음과 같은 첫 번째 종속성으로 인해 이미 추가되었다는 것을 깨달았습니다.

implementation fileTree(include: ['*.jar'], dir: 'libs')

이 줄은 lib 폴더의 모든 jar을 앱 종속성에 추가합니다.

따라서 추가 종속성을 제거한 후 implementation files('libs/json-simple-1.1.1.jar')

잘 작동합니다.


이것은 도움이되지만 답변과 관련이 없습니다. 라이브러리에서 이름과 형식이 비슷한 메타 폴더 META-INF 파일을 찾을 수 있습니다. 이로 인해 중복 파일 문제가 발생하므로 제거해야합니다.
Abhinav Saxena

7

여러 모듈 앱 환경에서 작동하는 비슷한 문제에 직면했습니다.

오류 : ': app : transformResourcesWithMergeJavaResForDebug'태스크에 대한 실행이 실패했습니다. OS 독립 경로 'META-INF / AL2.0'에 둘 이상의 파일이 있습니다.

이 문제는 이러한 여러 모듈에서보고되었으며 위의 해결 방법으로는 해결되지 않았습니다. 내가 사용하고있는 다른 라이브러리에 이미 포함되어있는 META-INF / AL2.0을 포함하는 것처럼 보이는 Coroutines 1.3.6 버전을 사용하고있었습니다. 이 문제를 해결하기 위해 실패한 모듈의 build.gradle에 다음 코드 스 니펫을 추가했습니다.

configurations.all {
    resolutionStrategy {
        exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-debug"

    }
}

여러 모듈에서 발생 resolutionStrategy했으므로 해당 코드를 프로젝트 레벨 build.gradle로 옮겼습니다. 그 후 모든 것이 효과가있었습니다.


4

나는 같은 문제가 있고 이것을 시도했다.

오류 : OS 독립 경로 'META-INF / library_release.kotlin_module'에서 둘 이상의 파일을 찾았습니다.

해결책:

android {
    packagingOptions {
    exclude 'META-INF/library_release.kotlin_module'
    }
}

3

나는 비슷한 문제가 있었다. 오류 메시지가 나타납니다.

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.

More than one file was found with OS independent path 'javax/annotation/WillCloseWhenClosed.java'

위의 답변 중 일부에서 언급했듯이 아래 코드를 사용하면 작동합니다.

'packagingOptions {
       exclude 'allclasses-frame.html'
    }'

그러나 20 개의 다른 파일에 대해이 오류가 발생했기 때문에 20 개의 파일을 제외 한 후 중지하고 적절한 솔루션을 찾으려고했습니다. 나는 또한 만났다

'Unable to execute dex: Multiple dex files' error.

나는 마침내 이것을 해결했다.

첫째로 (내 경우에는 WillCloseWhenClosed.java가 중복 파일 임), android studio에서 'search everywhere'옵션이 있습니다. 거기에서 파일을 작성하고 검색하십시오. 이 파일의 여러 인스턴스를 찾았습니다. 그래서 두 인스턴스를 모두 클릭하고 파일을 마우스 오른쪽 버튼으로 클릭하고 Android Studio에서 열 때 위치를 확인하여 위치를 보았습니다.

둘째, gradle 파일에 종속성이 있음을 알았습니다. 아래 코드를 사용하고있었습니다

dependencies {
    compile 'com.google.api-client:google-api-client:1.23.0'
}

또한 위치 : \ Users \ user \ AndroidStudioProjects \ git \ appname \ app \ libs \ google-http-client-1.23!에 동일한 zip 패키지가 있습니다.

그래서 이것은 중복되었고 gradle이 2 개의 파일을 찾는 이유입니다. 그래서 지퍼 패키지를 삭제하고 오류가 해결되었습니다. 이 작업을 수행하는 동안 조심하십시오. 삭제할 올바른 파일 또는 패키지가 무엇인지 파악해야합니다.

세 번째로, gradle 은이 위치에 이러한 버그 파일을 압축합니다 (적어도 나를 위해 만들었습니다)-C : \ Program Files \ Android \ Android Studio \ gradle \ m2repository \ com \ google \ code \ findbugs \ jsr305 \ 1.3. 9 \ jsr305-1.3.9.jar!

그래서 여기에서 jsr305-1.3.9.jar 파일을 삭제했습니다.

여전히 혼란 스럽다면 안드로이드 스튜디오에서 '모든 곳에서 검색'으로 이동하여 파일 인스턴스를 찾으십시오. 그중 하나를 삭제해야합니다. 시간을 가지고 어느 것을 알아 내십시오.


3

첨가

android.useAndroidX = true

android.enableJetifier = true

gradle.properties 날 위해 일했습니다.


1

나는이 문제에 직면했다. 먼저 네이티브 라이브러리 (.so 파일)와 java / kotlin 파일이 있습니다. 전이 의존성을 통해 유물을 참조 할뿐만 아니라 소스의 라이브러리를 포함하고있는 것으로 나타났습니다. 종속성 트리를 점검하여 중복 항목이 있는지 확인하십시오. ./gradlew :app:dependencies종속성 트리를 얻는 데 사용하십시오 . 기본 모듈 이름이 다른 경우 "앱"을 모듈 이름으로 바꾸십시오.


1

build.gradle android {}에서 최소 Android 버전> = 21을 변경해보십시오.


1

android 내 앱 레벨 gradel 파일에 다음을 추가 {}

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'
        exclude("META-INF/*.kotlin_module") 
      } 

0

기본 설정에서 멀티 덱스를 제거하고 빌드 오류 로그를 확인하십시오. 해당 로그가 INotification 클래스와 관련이있는 경우 이것을 안드로이드에서 사용 {}

configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4'
}

이것은 나를 도와줍니다.


0

아래 솔루션이 작동하면 도움을받을 수도 있습니다. 앱의 gradle 파일에 아래 줄을 썼습니다.

  packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }

0

유선으로 연결되었지만 프로젝트는 이미 AndroidX로 마이그레이션되었지만 androidX로 다시 마이그레이션 한 후 프로젝트의 일부를 리팩터링하여 문제를 해결했습니다.


0

app.gradle에 아래 코드를 추가하면 모든 라이브러리 종속성 오류가 해결됩니다.

   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'
    exclude("META-INF/*.kotlin_module")
    exclude 'META-INF/library_release.kotlin_module'
    pickFirst 'lib/armeabi-v7a/libavdevice.so'
    pickFirst 'lib/armeabi/libavdevice.so'
    pickFirst 'lib/armeabi/libswresample.so'
    pickFirst 'lib/armeabi-v7a/libswresample.so'
    pickFirst 'lib/armeabi/libswscale.so'
    pickFirst 'lib/armeabi/libavcodec.so'
    pickFirst 'lib/armeabi-v7a/libavutil.so'
    pickFirst 'lib/armeabi/libavutil.so'
    pickFirst 'lib/armeabi-v7a/libavformat.so'
    pickFirst 'lib/armeabi/libavfilter.so'
    pickFirst 'lib/armeabi/libavformat.so'
    pickFirst 'lib/armeabi-v7a/libavcodec.so'
    pickFirst 'lib/armeabi-v7a/libswscale.so'
    pickFirst 'lib/armeabi/libpostproc.so'
    pickFirst 'lib/armeabi-v7a/libpostproc.so'
    pickFirst 'lib/armeabi-v7a/libavfilter.so'
}

-1

나를 위해, 그것은 .txt가 아닌 .md였습니다

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

-1

이 문제에 대한 SO에 대한 많은 답변에서 추가 exclude 'META-INF/DEPENDENCIES'하고 다른 제외 는 제안되었습니다 . 그러나 이것들 중 어느 것도 나를 위해 일하지 않았습니다. 필자의 경우 시나리오는 다음과 같습니다.

나는 이것을 의존성에 추가했다.

implementation 'androidx.annotation:annotation:1.1.0'

또한 gradle.properties에 이것을 추가했습니다.

android.useAndroidX=true

빌드 오류 '심볼 클래스 Nullable을 찾을 수 없습니다'라는 오류가 발생하여 여기 에 추가 된 답변에 대한 해결책으로 제안되었습니다 .

그러나 결국 오류가 발생했습니다.

 More than one file was found with OS independent path 'androidsupportmultidexversion.txt'

아니 exclude나를 위해 일하고 있었다. 마지막으로 나는 suspecion (위에서 대체 방법으로 '심볼 클래스 Nullable을 찾을 수 없음'으로 해결됨)에서 위의 추가 된 줄을 제거하고 마침내 "OS에서 둘 이상의 파일을 찾았습니다 ..."빌드 오류를 제거했습니다. 나는 몇 시간을 낭비했다. 그러나 마침내 그것을 제거했다.


-1

클린 프로젝트캐시 무효화 및 재시작 만하면됩니다.

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