Android Studio 0.4 APK META-INF / LICENSE.txt에 복사 된 중복 파일


115

내 Studio를 0.3.7에서 0.4.0으로 업데이트 한 후 프로젝트를 컴파일 할 수 없습니다. stackoverflow에 대한 해결책을 찾았습니다. 중복 파일 복사 (Android Studio 0.4.0)

내 프로젝트를 0.7. + gradle로 업데이트했지만 다음 문자열을 어디에 넣어야하는지 모르겠습니다.

android {

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

내 logcat : 로그

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

PS 우분투 13.04에서 개발


2
내부 android섹션
Eugen Martynov

감사. 메인 gradle conf 파일에 block packagingOptions ()를 넣었습니다. 먼저 라이브러리 gradle 파일에이 블록을 삽입했습니다. 모든 작업이 완벽합니다 =)
a.black13

답변:


155

종속성을 맨 위에 놓고 packageOptions를 끝에 두는 것이 저에게 효과적이었습니다.

apply plugin: 'android'. 

다음은 앱 폴더의 전체 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'
    }
}

편집 : 거의 모든 OS 라이선스에는 프로젝트에 "라이선스 사본을 포함"해야하는 의무가 포함됩니다. 따라서 사용하는 모든 OS 라이선스의 사본을 프로젝트에 포함해야합니다. Gradle에서 "제외"하면 라이센스를 위반하게됩니다.

프로젝트에서 제외하는 것이 최선의 선택이 아닐 수 있습니다. 정보에 대해 RS에게 감사합니다.


2
@Andree 파일을 제외하는 이유는 빌드에 의해 생성 될 .apk에 .txt (및 기타) 파일이 포함되는 것을 원하지 않기 때문입니다.
biniam 2014

4
제외는 android {} 외부에서 인식되지 않습니다. : /
An-droid

4
Exclude는 android {} 안에 있어야만 작동합니다.
파반 Pyati

2
! 이 솔루션은 모든 오픈 소스 라이선스를 위반합니다! 당신이 당신의 패키지에 각 도서관의 원래 라이센스 텍스트를 추가 할 의무가있다으로
RS

2
안녕하세요. 어떤. 거의 모든 OS 라이선스에는 프로젝트에 "라이선스 사본을 포함"해야하는 의무가 포함됩니다. 따라서 사용하는 모든 OS 라이선스의 사본을 프로젝트에 포함해야합니다. Gradle에서 "제외"하면 라이센스를 위반하게됩니다.
RS

47

주의!! 오픈 소스 라이선스 위반 가능성.

위에서 제안한대로 license.txt 파일을 제외하면 소스에 추가하는 데 동의하는 오픈 소스 라이선스의 공통 지점이므로 일부 오픈 소스 라이선스를 위반할 수 있습니다. 오픈 소스 라이선스를 더 잘 확인하십시오.

업데이트 : 더 나은 솔루션이있을 때까지

packagingOptions {
   pickFirst  'META-INF/license.txt'
}

이와 같이 최소한 라이센스 의무의 일부를 이행합니다.


23

그냥 추가

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

build.gradle에서


우리는 이와 같은 오픈 소스 라이센스를 위반하고 있습니다
RS

16

다음 코드를 추가하여 수정할 수 있습니다 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 년 감사 일 전 수정되었습니다
a.black13

:-) 나는 오늘이 문제를 만났고이 스레드를 찾았습니다. 그리고 나는 날짜를 알지 못합니다.
AlfredZhong 2015

날짜를 알지 못했고 다른 모든 답변을 무시했습니다.
놀라운 Jan

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...' }고친 것입니다.
CJBrew

8

첨가:

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

나를 위해 일했습니다. biniam_Ethiopia의 솔루션은 아마도 가장 안전합니다.


8

이 코드를 삽입하는 동안

android{

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

SURE도하지 의 경우 오류 가 표시되고

> 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에도 있습니다.)


6

문제를 해결하는 데 도움이됩니다.

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

기본적으로 올바른 답변과 동일하다면 왜 이렇게 많은 반대 투표가 발생합니까?
Necronet

4
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 파일 및 syn 프로젝트 추가


3

2를 추가합니다.

android{

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

}

앱 제작에 여전히 포함 되나요?
RoCk RoCk

2

비슷한 오류가 발생하여 packingOptions()exclude기능 없이 해결했습니다 . 두 개의 종속성을 추가했지만 하나는 첫 번째의 하위 그룹이었습니다. 이로 인해 오류가 발생했으며 그중 하나를 제거하면 깨끗한 빌드를 얻었습니다. 종속성 블록 내에서 유사한 오류를 확인하는 것이 좋습니다.


안녕하세요, 나는 packingOptions ()를 추가하여 오래 전에이 문제를 해결했습니다. 답변 해 주셔서 감사합니다) +1
a.black13 2014 년

이 문제는 AS의 사용 가능한 새로운 버전에서 해결
a.black13

2

다음을 사용 java-jwt하고 jackson-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")

2

이것은 매우 좋지 않은 습관 일 수 있지만 여러 개의 큰 라이브러리를 포함하는 경우 이러한 종류의 충돌 수백 가지를 헤쳐 나갈 수 있습니다.

다음은 이러한 경우에 대한 매우 간단한 수정 사항입니다.

android { 
    ....
    packagingOptions {
        // Allow the compilation process to choose the dependencies for us.
        pickFirst "**"
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.