“APK META-INF / *에 복사 된 중복 파일”을 해결하려면 어떻게해야합니까? for task

저는 상용 안드로이드 애플리케이션에서 일하고 있습니다. 또한 다른 라이센스 유형에 따라 라이센스가 부여 된 일부 라이브러리를 사용하고 있습니다.

라이브러리에 속성 메모가있는 “NOTICE”파일이있는 경우 배포 할 때 해당 NOTICE를 포함해야합니다.

(그 중 하나는 예를 들어 Apache License 2.0 에 따라 사용이 허가되었습니다 .)

둘 이상의 라이브러리가 있습니다. 내가 함께 빌드 작업을 수행 할 때 Gradle을 하거나 함께 안드로이드 스튜디오 나는 다음과 같은 빌드 오류를 얻을 :

* 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

지금까지 인터넷과 stackoverflow에서 찾은 답변 build.gradle은 다음 을 파일 에 추가하여 패키지에서 license.txt (notice.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'
}

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

해당 라이브러리 (예 : Apache License 2.0 )의 라이선스에 따라 라이선스 및 알림 파일이 포함 되어야합니다 .

내 질문 : 라이선스 ( 기술 세부 정보 : 라이선스 텍스트가 연결됨)를 준수하기 위해 라이선스 (예 : license.txt , notice.txt 등) 와 관련된 여러 파일 을 gradle에서 프로젝트에 추가하려면 어떻게해야합니까?



답변

이름을 사용하는 라이선스가 하나만있는 경우 솔루션이 있습니다 license.txt(읽기 : 모든 license.txt사본이 동일 함).

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

그렇지 않으면 Google은 종속성 라이선스를 관리하는 Gradle 플러그인도 출시했습니다. 를 참조하십시오 여기 . 나는 그것을 시도하지 않았지만 모든 종속성을 집계하고 이러한 모든 라이센스를 표시하는 활동을 생성 할 수있는 것처럼 보입니다.


답변

각 build.gradle 파일에 다음을 추가하십시오.

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

답변

내 응용 프로그램에서 동일한 문제에 직면했습니다. 라이브러리를 두 번 추가하지 않았는지 확인해야합니다. firebase 문서 https://firebase.google.com/docs/android/setup을 따른 경우

그런 다음 android studio ie file-> project structure-> cloud-> firebase 안에 firebase 라이브러리를 추가해서는 안됩니다.

Android 애플리케이션에서 firebase를 사용하려면 둘 중 하나만 수행하면됩니다.

마지막에 앱을 정리하고 다시 실행하십시오.


답변

Gradle을가에서 여러 라이센스를 추가 할 수 있습니다 이 참조


답변

build.gradle에 다음 옵션 만 포함하면된다고 생각합니다.

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

답변

확실히 작동합니다

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