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ą.

David Lawson
źródło
Zobacz także stackoverflow.com/questions/20673888/...
Scott Barta,
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”.

Scott Barta
źródło
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'
    }
}
vincentjames501
źródło
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'
}
użytkownik3121011
źródło
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 .

JJD
źródło
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
ferdiado
źródło
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'
Ryan Heitner
źródło
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

Pian0_M4n
źródło
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'
    }
...
}
saneryee
źródło
3

To działa dla mnie:

android {
   packagingOptions {
       exclude 'LICENSE.txt'
   }
}
Sestertius
źródło
3

Myślę, że musisz dołączyć tylko te opcje do build.gradle :

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

ps sama odpowiedź z mojego posta w: Błąd :: duplikowanie plików podczas pakowania APK

Gent Berani
źródło
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'
    }
}
Patrick Favre
źródło
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 :)

clément francomme
źródło
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”) .

Alexander Logvinenko
źródło
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 .

Sakiboy
źródło
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'
      }
    }
Maxime
źródło
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'
  }

   ...
}
K. Stopa
źródło
0

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

packagingOptions{
      exclude 'META-INF/license.txt'
      exclude 'META-INF/notice.txt'
}
kandroidj
źródło
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'
    }
}
Igor Vuković
źródło
0

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

packagingOptions {
    exclude 'META-INF/LICENSE'
}
JSONParser
źródło
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'
}
alias26
źródło