Wtyczka Android Gradle 0.7.0: „zduplikowane pliki podczas pakowania APK”


324

Za pomocą wtyczki Android Gradle 0.7.0 z następującymi elementami 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
        ]
    }
}

daje błąd 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

Dziś rano wszystko działało dobrze, zanim zaktualizowałem Android Studio. Jakieś pomysły?

EDYCJA: Byłem w stanie to tymczasowo naprawić, uruchamiając polecenia takie jak

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

aż wszystkie zduplikowane błędy znikną.



2
Wygląda na to, że jest to błąd code.google.com/p/android/issues/detail?id=61573 . Nie wiem, dlaczego zaczęło to być dla ciebie kłopotliwe w tym wydaniu.
Scott Barta,

utknąłem z tym samym problemem. Postanowiłem pozostać w Android Studio 0.3.7 i stopniować wtyczkę 0.6.3, dopóki błąd nie zostanie rozwiązany
mente

6
Powinieneś być pewien, że nie używasz sformułowań: nie używasz wersji 0.7.0 - jest to wtyczka stopniowa dla Androida. Który używa gradle (z otoki) w wersji 1.9.0. Niewłaściwe sformułowania doprowadzą do pomieszania - poza danym kontekstem.
onigunn,

1
Zwróć uwagę na pickFirstopcję dostępną od wersji 0.9.1 .
JJD

Odpowiedzi:


475

Od wersji Android Studio 0.8.14

Powinieneś dodać:

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

do twojego build.gradlepliku.

Historia:

Zgodnie z komentarzem 14 w tym błędzie: https://issuetracker.google.com/issues/36982149#comment14 jest to błąd w wersji v0.7.0 wtyczki Android Gradle, który zostanie wkrótce naprawiony w wersji 0.7.1.

Oto uwagi tego błędu dotyczące dodania do wersji 0.7.1:

Wersja 0.7.1 jest już naprawiona.

DSL do wykluczenia plików to:

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

Możesz dodać dowolną liczbę instrukcji wykluczenia. Wartością jest ścieżka archiwum. Nie ma jeszcze obsługi symboli wieloznacznych ani globalnych.

W nazwach plików „LICENSE.txt” i „NOTICE.txt” rozróżniana jest wielkość liter. Wypróbuj również z „license.txt” i „notice.txt”.


12
Dzięki! Musiałem także wykluczyć „META-INF / NOTICE.txt”;)
Climbatize

71
Z dnia na dzień dziwi mnie, jak programiści mogli być zdalnie produktywni, zanim pojawił się przepełnienie stosu. Dzięki za poprawkę! Zamiast tego musiałem wykluczyć META-INF / LICENCJĘ i / UWAGA. (Bez txt, nawet w ostatniej klasie.)
domenukk

3
Jaki plik powinienem edytować i gdzie można go znaleźć? dzięki, Eyal.
eyal

2
@ um.anusorn Sean dał ci dobry przykład pliku stopniowego, który wyklucza te pliki z bibliotek podczas pakowania. Oto, co mam w swoim opakowaniu: PackagingOptions {wyklucz „META-INF / LICENCJA” wyklucz wyklucz „META-INF / UWAGA” wyklucz „META-INF / ZALEŻNOŚCI” wyklucz „META-INF / license.txt” wyklucz „META-INF / dependenices.txt 'exclude' META-INF / notice.txt '}
praneetloke

4
Nadal powszechny błąd w v0.12 wbudowanych narzędzi. Mówiąc
krótko

149

W moim przypadku musiałem podać kilka dodatkowych wykluczeń. Wygląda na to, że nie lubi wyrażeń regularnych, które sprawiłyby, że byłby to przyjemny jednowarstwowy.

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

Potrzebowałem tylko LICENSEi NOTICEpo dodaniu commons-lang3.
theblang

Ten pomógł mi (mam AndroidAnnotations + szablon Spring REST). Po dodaniu takich hacków ten produkt IntelliJ strasznie zaczyna przypominać Eclipse ...
javaxian

Nie wiem, który dotyczy, ale to jest naprawdę pomocne.
CopperCash,

Nie działało dla mnie, nadal pokazuje Ostrzeżenie: Zależność org.apache.httpcomponents: httpclient: 4.3 jest ignorowany podczas debugowania, ponieważ może być w konflikcie z wewnętrzną wersją udostępnianą przez Androida. W przypadku problemu, proszę ponownie zapakować go za pomocą jarjar, aby zmienić pakiety klas
VVB

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

4
Potrzebowałem .txtprzyrostka.
theblang

1
Coś innego, co robię, właśnie mnie tu sprowadziło i nie potrzebowałem .txtsufiksu. Więc myślę, że YMMV (lub MMMV w zależności od pory roku).
theblang

31

Zapraszamy do obejrzenia komentarza Sakiboy za !


Nieaktualna odpowiedź

Od wersji 0.9.1 obsługiwane są:

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

Więcej informacji w uwagach do wydania Gradle .


3
Jest to lepsze rozwiązanie, ponieważ programiści mają obowiązek dołączyć te pliki, gdy korzystają z oprogramowania typu open source.
Louth

1
Fajna opcja, ale ten komentarz jest całkowicie błędny. Uwzględniona zostanie tylko licencja z biblioteki firs, cała reszta zostanie pominięta.
Igor Čordaš

1
jest to przydatne, jeśli 2 biblioteki używają tych samych plików .so
Fabian

Czy mogę tego użyć dla dwóch plików JAR, które zawierają ten sam plik .class? Mam dwa dołączone pliki JAR, które zawierają org / xmlpull / v1 / XmlPullParser.class
WillC

2
@PSIXO, możesz zobaczyć odpowiedź poniżej, jeśli chcesz uwzględnić WSZYSTKIE licencje: stackoverflow.com/a/47828425/2371425
Sakiboy,

12

Ten sam problem podczas eksportowania biblioteki httclient-4.3.5 w Android Studio 0.8.6, muszę to uwzględnić:

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

Biblioteka zip zawiera następny słoik:

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

Ten błąd nadal występuje w wersji 0,8 + / 1,10

Z Jacksonem

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

Musiałem dołączyć, jak również powyższą sugestię, zanim się skompiluje

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

jak wykluczyć „META-INF / services / com.fasterxml.jackson.core.JsonFactory”. Który plik powinienem edytować?
UmAnusorn

6

To więcej niż jeden błąd

Pod apply plugin: 'android-library'

Dodaj ::

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

W przypadku powtarzających się plików to proste, zajrzeć do wnętrza JARpod META-INFdir i zobaczyć, co jest przyczyną błędu. Może być wiele. W moim przypadku wtyczka Couchbase Lite. W miarę dodawania kolejnych wtyczek będziesz potrzebować więcej wyjątków


Głupie pytanie: gdzie jest ten plik JAR?
WillC

W Android Studio uruchomienie Gradle z --info flagą pozwoliło mi zobaczyć dziennik klas dodawanych do apk, a następnie mogłem wyszukać w górę, aby znaleźć wpis dziennika dla tej samej klasy dodawanej z innego pliku JAR. To również pokazało mi ścieżkę do obu plików JAR. Nie mogłem znaleźć dobrego sposobu na wybranie jednego pliku .class nad drugim, więc zmodyfikowałem jeden z plików JAR i usunąłem zduplikowany
plik

4

Ten sam problem, gdy użyłem „org.springframework.android:spring-android-rest-template:2.0.0.M1” w Android Studio 1.0.1. Muszę to uwzględnić wbuild.gradle

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



2

Problem polega na tym, że folder META-INF nie zostanie przefiltrowany, więc wiele wpisów NOTICElub LICENSEpowoduje duplikowanie podczas budowania i próbuje się je skopiować razem.

Brudna szybka poprawka:

Otwórz .jarplik w .gradle/caches/...folderze (za pomocą narzędzia zgodnego z formatem zip) i usuń lub zmień nazwę plików w META-INFfolderze, które powodują błąd (zwykle NOTICElub LICENSE). (Wiem, że jest to również w PO, ale dla mnie nie było tak naprawdę jasne, dopóki nie przeczytałem forum Google)

EDYTOWAĆ:

Zostało to naprawione w wersji 0.7.1. Po prostu dodaj pliki wykluczające.

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

Och, przepraszam, teraz to rozumiem.
UmAnusorn

Być może najgorsza możliwa odpowiedź: zmiana słoików w pamięci podręcznej stopni może zmienić ich sumę kontrolną, aw konsekwencji nie będzie działać długo ... poza tym to nie są twoje słoiki
Riduidel

Tak, dlatego napisano „Dirty Quick Fix” pogrubioną czcionką. Właściwe rozwiązanie znajduje się w odległości paragrafu. Zdajesz sobie sprawę, że zostało to napisane w czasie, gdy nie było czystego rozwiązania, ale ludzie nadal musieli kompilować swoje aplikacje.
Patrick Favre

2

To samo tutaj z

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

Straciłem około 2 dni za ten dziwny błąd ... Dlaczego tak się dzieje w wersji 1.0.0? To jest bardzo niepokojące dla początkujących ... W każdym razie dzięki za te informacje, które myślałem, że były na moim kodzie :)


2

Ważne jest, aby wiedzieć, w jakim pliku występuje ten błąd (w twoim przykładzie jest to META-INF / LICENSE.txt), w moim przypadku było to w META-INF / LICENSE [bez „.txt”], a następnie w pliku META-INF / ASL2.0, więc dodałem do mojego build.gradle te linie:

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

Bardzo ważne (!) -> dodaj nazwę pliku w tym samym stylu, aby był widoczny w komunikacie o błędzie: w tekście rozróżniana jest wielkość liter i istnieje różnica między * .txt i * (bez „txt”) .


2

Jeśli chcesz wykonywać swoją rolę jako programista, korzystając z bibliotek typu open source, powinieneś spróbować uwzględnić wszystkie te licencje typu open source w swoim systemie apk. Aby to zrobić, możesz użyć metody scalania w swoim packagingOptions.

Przykład:

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

Ta odpowiedź jest lepsza niż używanie, pickFirstponieważ tylko ta metoda wybiera pierwszą znalezioną licencję i ignoruje resztę, co w pewnym sensie czyni ją bezużyteczną.

Krótko mówiąc, użyj merge metody, aby uwzględnić wszystkie te licencje z tych bibliotek typu open source, z których korzystałeś.

Więcej informacji o Gradle PackagingOptions .


2

Zauważyłem ten komentarz zatwierdzenia w AOSP, rozwiązaniem będzie wykluczenie niektórych plików przy użyciu DSL. Prawdopodobnie po wydaniu wersji 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'
      }
    }

tak i właśnie napisali informacje o wersji na stronie kompilacji, więc mam nadzieję, że wkrótce prześlą artefakt do maven central, abyśmy mogli go użyć!
Matt Wolfe,

1

W moim przypadku muszę tylko dodać do pliku build.gradle projektu:

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

   ...
}

0

W Android Studio 1.1.0 potrzebowałem małych liter:

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

0

W plikach „LICENSE.txt” i „NOTICE.txt” rozróżniana jest wielkość liter. Więc do SPring biblioteki Androida musiałem dodać

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

0

Usunięcie .txt po LICENCJI usunęło mój błąd:

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'
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.