Android Gradle 플러그인 0.7.0 :“PK를 패키징하는 동안 파일 복제”


324

다음과 함께 Android Gradle 플러그인 0.7.0 사용 build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.0'
    }
}

apply plugin: 'android'

repositories {
    maven { url "https://android-rome-feed-reader.googlecode.com/svn/maven2/releases" }
    maven { url "http://dl.bintray.com/populov/maven" }
    mavenCentral()
}

android {
    compileSdkVersion 19
    buildToolsVersion '18.1.1'

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 19
    }
    buildTypes {
        release {
            runProguard true
            proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
        }
    }
    productFlavors {
        defaultFlavor {
            proguardFile 'proguard-rules.txt'
        }
    }
    sourceSets {
        instrumentTest.setRoot('src/instrumentTest')
    }
}

configurations {
    apt
}

ext.androidAnnotationsVersion = '2.7.1';

dependencies {
    compile 'com.android.support:support-v4:18.0.0'

    compile 'com.viewpagerindicator:library:2.4.1@aar'

    compile 'com.google.code.android-rome-feed-reader:android-rome-feed-reader:1.0.0-r2'
    compile 'org.jdom:jdom:1.1.1-android-fork'

    apt "com.googlecode.androidannotations:androidannotations:${androidAnnotationsVersion}"
    compile "com.googlecode.androidannotations:androidannotations-api:${androidAnnotationsVersion}"

    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.j256.ormlite:ormlite-android:4.47'
    compile 'com.j256.ormlite:ormlite-core:4.47'
    compile 'org.springframework.android:spring-android-core:1.0.1.RELEASE'
    compile 'org.springframework.android:spring-android-rest-template:1.0.1.RELEASE'
    compile 'com.prolificinteractive:actionbarsherlock:4.3.1@aar'

    compile 'com.google.code.geocoder-java:geocoder-java:0.15'

    compile files('libs/CWAC-Pager.jar')
}

android.applicationVariants.all { variant ->
    aptOutput = file("${project.buildDir}/source/apt_generated/${variant.dirName}")
    println "****************************"
    println "variant: ${variant.name}"
    println "manifest:  ${variant.processResources.manifestFile}"
    println "aptOutput:  ${aptOutput}"
    println "****************************"

    variant.javaCompile.doFirst {
        println "*** compile doFirst ${variant.name}"
        aptOutput.mkdirs()
        variant.javaCompile.options.compilerArgs += [
                '-processorpath', configurations.apt.getAsPath(),
                '-AandroidManifestFile=' + variant.processResources.manifestFile,
                '-s', aptOutput
        ]
    }
}

오류가 발생합니다 Duplicate files copied in APK META-INF/LICENSE.txt:

WARNING: Dependency commons-logging:commons-logging:1.0.4 is ignored for defaultFlavorDebug as it may be conflicting with the internal version provided by Android.
         In case of problem, please repackage it with jarjar to change the class packages
WARNING: Dependency commons-logging:commons-logging:1.0.4 is ignored for defaultFlavorRelease as it may be conflicting with the internal version provided by Android.
         In case of problem, please repackage it with jarjar to change the class packages
Creating properties on demand (a.k.a. dynamic properties) has been deprecated and is scheduled to be removed in Gradle 2.0. Please read http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html for information on the replacement for dynamic properties.
Deprecated dynamic property: "aptOutput" on "com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@5705013c", value: "/Users/david/Developer...".
****************************
variant: defaultFlavorDebug
manifest:  /Users/david/Developer/.../build/manifests/defaultFlavor/debug/AndroidManifest.xml
aptOutput:  /Users/david/Developer/.../build/source/apt_generated/defaultFlavor/debug
****************************
Deprecated dynamic property "aptOutput" created in multiple locations.
****************************
variant: defaultFlavorRelease
manifest:  /Users/david/Developer/.../build/manifests/defaultFlavor/release/AndroidManifest.xml
aptOutput:  /Users/david/Developer/.../build/source/apt_generated/defaultFlavor/release
****************************
:TravelGuard:compileDefaultFlavorDebugNdk UP-TO-DATE
:TravelGuard:preBuild UP-TO-DATE
:TravelGuard:preDefaultFlavorDebugBuild UP-TO-DATE
:TravelGuard:preDefaultFlavorReleaseBuild UP-TO-DATE
:TravelGuard:prepareComProlificinteractiveActionbarsherlock431Library UP-TO-DATE
:TravelGuard:prepareComViewpagerindicatorLibrary241Library UP-TO-DATE
:TravelGuard:prepareDefaultFlavorDebugDependencies
:TravelGuard:compileDefaultFlavorDebugAidl UP-TO-DATE
:TravelGuard:compileDefaultFlavorDebugRenderscript UP-TO-DATE
:TravelGuard:generateDefaultFlavorDebugBuildConfig UP-TO-DATE
:TravelGuard:mergeDefaultFlavorDebugAssets UP-TO-DATE
:TravelGuard:mergeDefaultFlavorDebugResources UP-TO-DATE
:TravelGuard:processDefaultFlavorDebugManifest UP-TO-DATE
:TravelGuard:processDefaultFlavorDebugResources UP-TO-DATE
:TravelGuard:generateDefaultFlavorDebugSources UP-TO-DATE
:TravelGuard:compileDefaultFlavorDebugJava
*** compile doFirst defaultFlavorDebug
/Users/david/Developer/.../src/main/java/com/travelguard/service/TravelGuardService.java:53: cannot find symbol
symbol  : class TravelGuardPrefs_
location: class com.travelguard.service.TravelGuardService
    TravelGuardPrefs_ travelGuardPrefs;
    ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CategoriesActivity.java:14: cannot find symbol
symbol  : class AssistanceFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.AssistanceFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CategoriesActivity.java:16: cannot find symbol
symbol  : class CategoryFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.CategoryFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CategoriesActivity.java:17: cannot find symbol
symbol  : class ContactFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.ContactFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CountriesActivity.java:25: cannot find symbol
symbol  : class TravelGuardPrefs_
location: package com.travelguard.service
import com.travelguard.service.TravelGuardPrefs_;
                              ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CountriesActivity.java:44: cannot find symbol
symbol  : class TravelGuardPrefs_
location: class com.travelguard.ui.CountriesActivity
    TravelGuardPrefs_ travelGuardPrefs;
    ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/InstructionsActivity.java:18: cannot find symbol
symbol  : class AssistanceFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.AssistanceFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/InstructionsActivity.java:19: cannot find symbol
symbol  : class ContactFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.ContactFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/InstructionsActivity.java:21: cannot find symbol
symbol  : class InstructionsFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.InstructionsFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:36: cannot find symbol
symbol  : class TravelGuardPrefs_
location: package com.travelguard.service
import com.travelguard.service.TravelGuardPrefs_;
                              ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:40: cannot find symbol
symbol  : class AssistanceFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.AssistanceFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:41: cannot find symbol
symbol  : class ContactFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.ContactFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:55: cannot find symbol
symbol  : class TravelGuardPrefs_
location: class com.travelguard.ui.MainActivity
    TravelGuardPrefs_ travelGuardPrefs;
    ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/TermsActivity.java:17: cannot find symbol
symbol  : class TravelGuardPrefs_
location: package com.travelguard.service
import com.travelguard.service.TravelGuardPrefs_;
                              ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/TermsActivity.java:23: cannot find symbol
symbol  : class TravelGuardPrefs_
location: class com.travelguard.ui.TermsActivity
    TravelGuardPrefs_ travelGuardPrefs;
    ^
Note: Starting AndroidAnnotations annotation processing
Note: AndroidManifest.xml file found: /Users/david/Developer/.../build/manifests/defaultFlavor/debug/AndroidManifest.xml
Note: Number of files generated by AndroidAnnotations: 22
Note: Generating source file: com.travelguard.service.SmartTravellerService_
Note: Generating source file: com.travelguard.service.SmartTravellerWebservice_
Note: Generating source file: com.travelguard.service.TravelGuardPrefs_
Note: Generating source file: com.travelguard.service.TravelGuardService_
Note: Generating source file: com.travelguard.service.TravelGuardWebservice_
Note: Generating source file: com.travelguard.ui.AdviceActivity_
Note: Generating source file: com.travelguard.ui.CategoriesActivity_
Note: Generating source file: com.travelguard.ui.ContactDetailActivity_
Note: Generating source file: com.travelguard.ui.ContactListActivity_
Note: Generating source file: com.travelguard.ui.ContactTravelGuardActivity_
Note: Generating source file: com.travelguard.ui.CountriesActivity_
Note: Generating source file: com.travelguard.ui.InformationActivity_
Note: Generating source file: com.travelguard.ui.InstructionsActivity_
Note: Generating source file: com.travelguard.ui.MainActivity_
Note: Generating source file: com.travelguard.ui.TermsActivity_
Note: Generating source file: com.travelguard.ui.TravelGuardActivity_
Note: Generating source file: com.travelguard.ui.fragments.AdviceDetailFragment_
Note: Generating source file: com.travelguard.ui.fragments.AdviceFragment_
Note: Generating source file: com.travelguard.ui.fragments.AssistanceFragment_
Note: Generating source file: com.travelguard.ui.fragments.CategoryFragment_
Note: Generating source file: com.travelguard.ui.fragments.ContactFragment_
Note: Generating source file: com.travelguard.ui.fragments.InstructionsFragment_
Note: Time measurements: [Whole Processing = 913 ms], [Generate Sources = 358 ms], [Extract Manifest = 163 ms], [Process Annotations = 158 ms], [Extract Annotations = 120 ms], [Validate Annotations = 82 ms], [Find R Classes = 28 ms],
Note: Time measurements: [Whole Processing = 0 ms],
Note: Time measurements: [Whole Processing = 0 ms],
warning: The following options were not recognized by any processor: '[androidManifestFile]'
Note: /Users/david/Developer/.../src/main/java/com/travelguard/ui/ContactDetailActivity.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: /Users/david/Developer/.../src/main/java/com/travelguard/service/SmartTravellerService.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
:TravelGuard:preDexDefaultFlavorDebug UP-TO-DATE
:TravelGuard:dexDefaultFlavorDebug
:TravelGuard:processDefaultFlavorDebugJavaRes UP-TO-DATE
:TravelGuard:validateDebugSigning
:TravelGuard:packageDefaultFlavorDebug
Error: duplicate files during packaging of APK /Users/david/Developer/.../build/apk/TravelGuard-defaultFlavor-debug-unaligned.apk
    Path in archive: META-INF/LICENSE.txt
    Origin 1: /Users/david/.gradle/caches/modules-2/files-2.1/commons-httpclient/commons-httpclient/3.1/964cd74171f427720480efdec40a7c7f6e58426a/commons-httpclient-3.1.jar
    Origin 2: /Users/david/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.2/397f4731a9f9b6eb1907e224911c77ea3aa27a8b/commons-codec-1.2.jar
:TravelGuard:packageDefaultFlavorDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':TravelGuard:packageDefaultFlavorDebug'.
> Duplicate files copied in APK META-INF/LICENSE.txt
    File 1: /Users/david/.gradle/caches/modules-2/files-2.1/commons-httpclient/commons-httpclient/3.1/964cd74171f427720480efdec40a7c7f6e58426a/commons-httpclient-3.1.jar
    File 2: /Users/david/.gradle/caches/modules-2/files-2.1/commons-httpclient/commons-httpclient/3.1/964cd74171f427720480efdec40a7c7f6e58426a/commons-httpclient-3.1.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: 21.957 secs

오늘 아침 Android Studio를 업데이트하기 전에 문제가 해결되었습니다. 어떤 아이디어?

편집 : 나는 같은 명령을 실행하여 일시적으로 고칠 수있었습니다.

zip -d spring-android-core-1.0.1.RELEASE.jar META-INF/notice.txt

모든 중복 오류가 사라질 때까지.



2
버그 code.google.com/p/android/issues/detail?id=61573 인 것 같습니다 . 이 릴리스에서 왜 귀찮게 시작했는지 모르겠습니다.
Scott Barta

같은 문제가 발생했습니다. 버그가 해결 될 때까지 안드로이드 스튜디오 0.3.7과 0.6.3 플러그인 Gradle을에 머물하기로 결정
mente

6
gradle 0.7.0을 사용하지 않습니다-안드로이드 gradle 플러그인입니다. 버전 1.9.0에서 gradle (래퍼 포함)을 사용합니다. 잘못된 표현은 주어진 맥락 외에 혼란을 초래할 것입니다.
onigunn

1
Gradle 0.9.1pickFirst 부터 사용 가능한 옵션에 유의하십시오 .
JJD

답변:


475

Android Studio 버전 0.8.14 기준

다음을 추가해야합니다.

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

너의 ~에게 build.gradle 파일.

역사:

이 버그의 댓글 14에 따르면 https://issuetracker.google.com/issues/36982149#comment14 이것은 Android Gradle 플러그인 v0.7.0의 버그이며 0.7.1에서 곧 수정 될 예정입니다.

0.7.1의 추가에 대한 버그의 메모는 다음과 같습니다.

0.7.1은이 문제를 해결했습니다.

파일을 제외 할 DSL은 다음과 같습니다.

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

제외 문을 원하는만큼 추가 할 수 있습니다. 값은 아카이브 경로입니다. 아직 와일드 카드 나 글로브 지원이 없습니다.

파일 이름 "LICENSE.txt"및 "NOTICE.txt"는 대소 문자를 구분합니다. "license.txt"및 "notice.txt"로도 시도하십시오.


12
감사! 나는 또한 'META-INF / NOTICE.txt';)를 제외해야했다;)
Climbatize

71
나는 매일 프로그래머가 원격으로 생산성을 발휘할 수 있었던 것에 대해 놀랐다. 수정 해 주셔서 감사합니다! 대신 META-INF / LICENSE 및 / NOTICE를 제외해야했습니다. (최신 gradle에서도 txt 없음)
domenukk

3
어떤 파일을 편집하고 어디에서 찾을 수 있습니까? 고마워, Eyal.
eyal

2
@ um.anusorn Sean은 패키징 중에 라이브러리에서 이러한 파일을 제외시키는 gradle 파일에 대한 좋은 예를 제공했습니다. 이것이 내가 가진 것입니다 : packagingOptions {제외 'META-INF / LICENSE'제외 'META-INF / NOTICE'제외 'META-INF / DEPENDENCIES'제외 'META-INF / license.txt'제외 'META-INF / dependenices.txt '제외'META-INF / notice.txt '}
praneetloke

4
v0.12의 빌드 도구에서 여전히 널리 퍼져있는 버그. 그냥 말하면
Nilzor

149

제 경우에는 몇 가지 추가 제외 사항을 포함시켜야했습니다. 정규 표현식이 마음에 들지 않아서 멋진 라이너로 만들었습니다.

android {
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/LGPL2.1'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/notice.txt'
    }
}

난 단지 필요로 LICENSE하고 NOTICE내가 추가 한 후 commons-lang3.
theblang

이것은 나를 도왔습니다 (AndroidAnnotations + Spring REST 템플릿이 있습니다). 이러한 해킹을 추가해야 할 때이 IntelliJ 제품은 이클립스와 흡사하게 시작됩니다 ...
javaxian

어느 것이 영향을 받는지 모르지만 이것은 실제로 도움이됩니다.
CopperCash

나를 위해 일하지 않았지만 여전히 경고 : 종속성 org.apache.httpcomponents : httpclient : 4.3은 Android에서 제공하는 내부 버전과 충돌 할 수 있으므로 디버그에서 무시됩니다. 문제가있을 경우, jarjar로 다시 패키지하여 클래스 패키지를 변경하십시오.
VVB

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

4
.txt접미사가 필요했습니다 .
theblang

1
내가하고있는 다른 일이 나를 다시 여기로 데려 왔으며 .txt접미사 가 필요하지 않았습니다 . 그래서 YMMV (또는 시간에 따라 MMMV)를 추측합니다.
theblang

31

Sakiboy의 의견을 살펴보십시오 !


오래된 답변

Gradle 0.9.1부터 다음이 지원됩니다.

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

Gradle 릴리즈 노트 에 더 많은 정보가 있습니다 .


3
개발자가 오픈 소스 소프트웨어를 사용할 때 이러한 파일을 포함시켜야 할 의무가 있으므로 이는 더 나은 솔루션입니다.
Louth

1
좋은 옵션이지만이 의견은 완전히 잘못되었습니다. firs 라이브러리의 라이센스 만 포함되며 나머지는 모두 제거됩니다.
Igor Čordaš

1
이것은 2 개의 라이브러리가 동일한 .so 파일을 사용하는 경우에 유용합니다
Fabian

동일한 .class 파일을 포함하는 두 개의 JAR에 사용할 수 있습니까? org / xmlpull / v1 / XmlPullParser.class를 포함하는 두 개의 JAR이 있습니다.
WillC

2
@PSIXO, 모든 라이센스를 포함하려면 아래 답변을 볼 수 있습니다. stackoverflow.com/a/47828425/2371425
Sakiboy

12

안드로이드 스튜디오 0.8.6에서 라이브러리 httclient-4.3.5를 내보낼 때도 같은 문제가 있습니다.

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

라이브러리는 다음 jar 파일을 압축합니다.

commons-codec-1.6.jar
commons-logging-1.1.3.jar
fluent-hc-4.3.5.jar
httpclient-4.3.5.jar
httpclient-cache-4.3.5.jar
httpcore-4.3.2.jar
httpmime-4.3.5.jar

8

이 버그는 여전히 0.8 + / 1.10에 존재합니다

잭슨과 함께

compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.2.2'

위의 제안뿐만 아니라 컴파일하기 전에 포함시켜야했습니다.

exclude 'META-INF/services/com.fasterxml.jackson.core.JsonFactory'

'META-INF / services / com.fasterxml.jackson.core.JsonFactory'를 제외하는 방법. 어떤 파일을 편집해야합니까?
UmAnusorn

6

하나 이상의 오류입니다

아래에 apply plugin: 'android-library'

이거 추가 해봐 ::

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

중복 파일의 경우 쉽습니다 JAR. META-INF디렉토리 아래를 살펴보고 오류의 원인을 확인하십시오. 여러 개가 될 수 있습니다. 제 경우에는 Couchbase Lite 플러그인입니다. 더 많은 플러그인을 추가하면 더 많은 예외가 필요합니다


바보 같은 질문 : 그 JAR 파일은 어디에 있습니까?
WillC

Android Studio에서 Gradle을 --info 플래그 와 함께 실행 하면 apk에 추가되는 클래스의 로그를 볼 수 있으며 다른 JAR에서 추가 된 동일한 클래스의 로그 항목을 찾기 위해 위쪽으로 검색 할 수 있습니다. 이것은 또한 두 JAR 파일의 파일 경로를 보여줍니다. 한 .class 파일을 다른 .class 파일 중에서 선택하는 좋은 방법을 찾을 수 없었기 때문에 JAR 파일 중 하나를 수정하고 중복 .class를 제거했습니다.
WillC

4

Android Studio 1.0.1에서 'org.springframework.android:spring-android-rest-template:2.0.0.M1'을 사용할 때와 동일한 문제입니다. 나는 이것을 포함해야합니다.build.gradle

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

3

이것은 나를 위해 작동합니다 :

android {
   packagingOptions {
       exclude 'LICENSE.txt'
   }
}


2

문제는 META-INF 폴더가 필터링되지 않으므로 빌드 할 때 여러 항목을 입력 NOTICE하거나 LICENSE중복을 유발하여 함께 복사하려고한다는 것입니다.

더티 퀵 픽스 :

zip 호환 도구 .jar를 사용하여 .gradle/caches/...폴더 에서 파일을 열고 폴더 의 파일을 제거하거나 이름을 바꾸십시오 META-INF(일반적으로 NOTICE또는 LICENSE). (OP에도 있음을 알고 있지만 Google 포럼을 읽을 때까지는 명확하지 않았습니다)

편집하다:

이것은 0.7.1에서 수정되었습니다. 제외 할 파일을 추가하기 만하면됩니다.

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

죄송합니다. 지금 이해하고 있습니다.
UmAnusorn

어쩌면 최악의 대답 : gradle 캐시에서 항아리를 변경하면 체크섬이 변경 될 수 있으며 결과적으로 오랫동안 작동하지 않습니다 ... 게다가 그 항아리는 항아리가 아닙니다
Riduidel

그렇기 때문에 "더티 퀵 픽스"라고 굵은 글씨로 표시됩니다. 또한 올바른 해결책은 단락이 없습니다. 깨끗한 솔루션이 없었던 시점에 작성되었지만 사람들은 여전히 ​​앱을 컴파일해야한다는 것을 알고 있습니다.
Patrick Favre 2016 년

2

여기와 동일

dependencies {
    compile 'org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.0'
}

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

그 이상한 오류로 2 일 잃어 버렸습니다 ... 왜 이것이 gradle 1.0.0에서 여전히 발생합니까? 그것은 초보자에게 매우 혼란 스럽습니다 ... 어쨌든, 그 정보에 감사드립니다. 내 코드에 있다고 생각했습니다 :)


2

이 오류가 발생하는 파일을 아는 것이 중요합니다 (예 : META-INF / LICENSE.txt), 제 경우에는 META-INF / LICENSE [ "txt없이]] 파일에 있습니다 META-INF / ASL2.0 그래서 나는 build.gradle에 다음 줄을 추가했습니다 :

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

매우 중요 (!)-> 파일 이름을 같은 스타일로 추가하여 오류 메시지에 표시하십시오. 텍스트는 대소 문자를 구분하며 * .txt와 * ( "txt"없이) 사이에는 차이가 있습니다. .


2

오픈 소스 라이브러리를 활용하여 개발자로서 자신의 역할을 수행하려면에 모든 오픈 소스 라이센스를 포함시켜야합니다 apk. 이렇게하려면의 병합 방법을 사용할 수 있습니다 packagingOptions.

예:

packagingOptions {
        // This will get include every license and notice regardless of what dir it’s in.
        merge '**/LICENSE.txt'
        merge '**/NOTICE.txt'
        merge '**/notice.txt'
        merge '**/license.txt'
        merge '**/NOTICE'
        merge '**/LICENSE'
        merge '**/notice'
        merge '**/license'
        merge '**/LGPL2.1'
        // This will exclude any README files, regardless of the dir or the file type.
        exclude '**/README.*'
}

pickFirst방법 은 사용 하는 것보다 낫습니다. 이 방법 은 첫 번째 라이센스 선택하고 나머지는 모두 무시하므로이 경우에는 쓸모가 없게됩니다.

간단히 merge말해서이 방법을 사용하여 사용중인 kickass 오픈 소스 라이브러리의 모든 라이센스를 포함하십시오.

더 많은 정보 Gradle PackagingOptions .


2

AOSP 에서이 커밋 주석을 발견했습니다. 솔루션은 DSL을 사용하여 일부 파일을 제외하는 것입니다. 아마도 0.7.1이 릴리스되었을 때.

commit e7669b24c1f23ba457fdee614ef7161b33feee69
Author: Xavier Ducrohet <--->
Date:   Thu Dec 19 10:21:04 2013 -0800

    Add DSL to exclude some files from packaging.

    This only applies to files coming from jar dependencies.
    The DSL is:

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

예, 그들은 단지 빌드 사이트에 릴리스 노트를 썼기 때문에 인공물을 곧 Maven Central에 업로드하여 사용할 수 있기를 바랍니다!
매트 울프

1

필자의 경우 프로젝트의 build.gradle 파일에만 추가하면됩니다.

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

   ...
}

0

Android Studio 1.1.0에서는 소문자 이름이 필요했습니다.

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

0

"LICENSE.txt"및 "NOTICE.txt"파일은 대소 문자를 구분합니다. SPring android library에 추가해야했습니다.

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

0

LICENSE가 내 오류를 제거한 후 .txt를 제거하십시오.

packagingOptions {
    exclude 'META-INF/LICENSE'
}

0
  packagingOptions {
    exclude 'META-INF/DEPENDENCIES.txt'
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/dependencies.txt'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/LGPL2.1'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/notice.txt'
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.