Android Studio 0.4 Zduplikowane pliki skopiowane w pliku APK META-INF / LICENSE.txt


115

Po zaktualizowaniu programu Studio z wersji 0.3.7 do 0.4.0 nie mogę skompilować projektu. Znalazłem rozwiązanie na stackoverflow: skopiowano zduplikowane pliki (Android Studio 0.4.0)

Zaktualizowałem swój projekt do gradle 0.7. +, Ale nie wiem, gdzie mam umieścić następne ciągi:

android {

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

Mój logcat: log

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 Opracuj w Ubuntu 13.04


2
androidSekcja wewnętrzna
Eugen Martynov

Dzięki. Umieściłem block PackagingOptions () w głównym pliku konfiguracyjnym gradle. Najpierw wstawiłem ten blok do plików gradle bibliotek. Cała praca jest idealnie =)
a.black13

Odpowiedzi:


155

Umieszczenie zależności na górze i pakietu Opcje na końcu zadziałało.

apply plugin: 'android'. 

Oto moja pełna wersja build.gradle w folderze aplikacji.

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

EDYCJA: Prawie wszystkie licencje systemu operacyjnego obejmują obowiązek „dołączenia kopii licencji” do projektu. Oznacza to, że musisz dołączyć kopię wszystkich licencji systemu operacyjnego, z których korzystasz w swoich projektach. „Wykluczając” je w gradle, naruszasz licencje.

Wykluczenie ich z projektu może nie być najlepszym rozwiązaniem. Dziękuję RS za informację.


2
@Andree Powodem, dla którego wykluczamy pliki, jest to, że nie chcemy, aby pliki .txt (i inne) były zawarte w .apk, który zostanie wygenerowany przez kompilację.
biniam

4
exclude nie jest rozpoznawany poza Androidem {}: /
An-droid

4
Wykluczenie powinno znajdować się w android {}, wtedy tylko działa.
Pavan Pyati

2
! To rozwiązanie narusza wszystkie licencje Open Source! Ponieważ jesteś zobowiązany do dodania oryginalnego tekstu licencji każdej biblioteki do swojego pakietu
RS

2
Cześć. Każdy. Prawie wszystkie licencje systemu operacyjnego zawierają obowiązek „dołączenia kopii licencji” do projektu. Oznacza to, że musisz dołączyć kopię wszystkich licencji systemu operacyjnego, z których korzystasz w swoich projektach. „Wykluczając” je w gradle, naruszasz licencje.
RS

47

Uwaga!! Możliwe naruszenie licencji OpenSource.

Wyłączając pliki license.txt, jak zaproponowano powyżej, możesz naruszyć niektóre licencje open source, ponieważ w licencjach open source często zgadzasz się na dodanie go do źródła. Lepiej sprawdź swoje licencje opensource.

Aktualizacja: dopóki nie pojawi się lepsze rozwiązanie, używaj

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

w ten sposób wypełniasz przynajmniej część obowiązku licencyjnego


23

poprostu dodaj

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

w build.gradle


W ten sposób naruszamy licencję open source
RS

16

Możesz to naprawić, dodając następujący kod do 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'
    }
}

Cześć. Ten problem został rozwiązany 1,5 roku temu. Dziękuję za odpowiedź
a.black13

:-) Właśnie dzisiaj napotkałem ten problem i znalazłem ten wątek. I nie zauważam daty.
AlfredZhong,

Nie zauważyłeś daty ORAZ zignorowałeś wszystkie inne odpowiedzi.
Niesamowity

11

Miałem ten sam problem, co w nowej wersji gradle, poniżej build.gradle działa dla mnie format tekstowy :

W moim folderze libs znajdują się dwa słoiki jackson.

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

Dziękuję Ci! Waliłem w to głowę przez ~ 5 godzin dzisiaj. :) To właśnie packagingOptions { exclude 'libs/jackson...' }to naprawiło.
CJBrew

8

Dodanie:

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

zadziałało dla mnie, rozwiązanie biniam_Ethiopia jest prawdopodobnie najbardziej niezawodne


8

Podczas wstawiania tego kodu

android{

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

UPEWNIJ SIĘ ,że jest wyświetlany błąd

> Zduplikowane pliki skopiowane w pliku APK META-INF / LICENSE.txt

następnie dodaj

 android{

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

}

jeśli pomyłka to się wyświetla

> Duplikaty plików skopiowane w APK META-INF / LICENSE

następnie dodaj

 android{

packagingOptions{
    exclude 'META-INF/LICENSE'
 }

}

jeśli pomyłka to się wyświetla

> Zduplikowane pliki skopiowane w pliku APK META-INF / license.txt

następnie dodaj

 android{

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

}

W krótkim tekście CASE i FORMAT dokumentu (.txt) są bardzo ważne.

(ten błąd występuje również w Android Studio 1.1.0)


6

Pomoże ci to rozwiązać problem

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

dlaczego to ma tak wiele głosów przeciw, jeśli w zasadzie jest to to samo, co poprawna odpowiedź?
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'
}

Dodaj plik build.gradle i zsynchronizuj projekt


3

Po prostu dodaję 2:

android{

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

}

Czy będzie to nadal uwzględniane w produkcji aplikacji?
RoCk RoCk

2

Miałem podobny błąd i rozwiązałem go bez funkcji packingOptions()i exclude. Dodawałem dwie zależności, ale jedna była podgrupą pierwszej. To spowodowało błąd, po usunięciu jednego z nich otrzymałem czystą kompilację. Zalecam sprawdzenie podobnego błędu w bloku zależności.


Cześć, rozwiązałem ten problem już dawno temu, dodając funkcję PackingOptions (). Dzięki za odpowiedź) +1
a.black13

Ten problem został rozwiązany w nowej dostępnej wersji AS
a.black13

2

Podczas używania java-jwti jackson-corerazem używaj następujących:

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

Może to być bardzo zła praktyka, jednak jeśli dołączasz wiele dużych bibliotek, możesz znaleźć się podczas pracy z setkami tego rodzaju konfliktów.

Poniżej wymieniono bardzo proste rozwiązanie w takich przypadkach:

android { 
    ....
    packagingOptions {
        // Allow the compilation process to choose the dependencies for us.
        pickFirst "**"
    }
}
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.