İşletim sistemi bağımsız yolu 'META-INF / LICENSE' ile birden fazla dosya bulundu


333

Uygulamamı oluşturduğumda şu hatayı alıyorum:

Hata: ': app: transformResourcesWithMergeJavaResForDebug' görevi için yürütme başarısız oldu. İşletim sistemi bağımsız yolu 'META-INF / LICENSE' ile birden fazla dosya bulundu

Bu benim build.gradle dosyam:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "cn.sz.cyrus.kotlintest"
        minSdkVersion 14
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        javaCompileOptions{
            annotationProcessorOptions{
                includeCompileClasspath = true
            }
        }
        multiDexEnabled true
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    packagingOptions {
 /*       exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'*/
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:design:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1'
    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
    testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
    compile 'com.github.GrenderG:Toasty:1.2.5'
    compile 'com.orhanobut:logger:1.15'

    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'com.umeng.analytics:analytics:latest.integration'
    compile 'ai.api:libai:1.4.8'
    compile 'ai.api:sdk:2.0.5@aar'
// api.ai SDK dependencies
    compile 'com.google.code.gson:gson:2.8.0'
    compile 'commons-io:commons-io:2.4'
    compile 'com.android.support:multidex:1.0.1'
}

Bu kodu build.gradle dosyama eklediğimde,

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

Bu hata çözülecek, ancak başka bir sorun ortaya çıkacak. Bunun gibi:

java.lang.NoClassDefFoundError: com.squareup.leakcanary.internal.HeapAnalyzerService
at com.squareup.leakcanary.LeakCanary.isInAnalyzerProcess(LeakCanary.java:145)
at cn.sz.cyrus.wemz.TestApplication.onCreate(TestApplication.kt:32)

Bunu nasıl çözeceği hakkında kim fikirleri var?


Android için Google API İstemci Kitaplığı'na erişirken de aynı sorunla karşılaştım. HttpClient modülünü sınıf bağımlılıklarından hariç tutarak sorunu çözdü. Daha fazla ayrıntı için Google dokümanlarına bakın developers.google.com/api-client-library/java/… "Android'de, kullanılmayan bağımlılıkları açıkça hariç tutmanız gerekir:"
mifthi

Yanıtlar:


493

Bunu yourProject/app/build.gradleiçeride ekleyebilirsinizandroid{}

android {      
      packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
        exclude("META-INF/*.kotlin_module") 
      }          
}

23
Bunun neden işe yaradığını ve "META-INF" nin ne anlama geldiğini açıklayabilir misiniz? Teşekkür ederim!
Shreshth Kharbanda

@CodeSlave, tez dosyalarını google.github.io/android-gradle-dsl/current/… 'da hariç tutma şablonuyla hariç tutmadığımızda apk ile ilgili bir soruna neden olur . tüm bildiğim. bu sorun hakkında tam bir fikrim yok
Shaaban Ebrahim

11
Bu soruya cevap verebilirken, bu cevabın sorunu çözmeye nasıl yardımcı olabileceğine dair bir açıklama eklemek daha iyidir. Lütfen daha fazla bilgi için nasıl iyi bir cevap yazarım? Bölümünü okuyun .
Roshana Pitigala

3
Benim durumumda ayrıca 'META-INF / LICENSE.md' ve 'META-INF / LICENSE-notice.md'
Klyner

1
PackageginOptions listesine exclude ("META-INF / *. Kotlin_module") ekle
Jaspal

129

Benim durumumda sadece yourProject/app/build.gradleiçerideki 'META-INF / DEPENDENCIES' yolunu hariç tutmak yeterliydi android{} . İşte burada

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}

Ardından Projeyi Temizle ve Yeniden Oluştur'u yapın.


11
'META-INF / LİSANS' seçeneğini hariç tutmayı deneyin 'META-INF / LİSANS'
Pelanes

7
Lütfen açıklama
Mohammad Ali

1
@SilSur benim hatam gibi hata bu dosyayı hariç "META-INF / proguard / androidx-annotations.pro" bu dosya için aynı hatayı, ve sonra ekledi 'META-INF / proguard / androidx-ek açıklamaları ekledi. pro 've işleri.
Gunavant Patel

4
Bu soruya cevap verebilirken, bu cevabın sorunu çözmeye nasıl yardımcı olabileceğine dair bir açıklama eklemek daha iyidir. Lütfen daha fazla bilgi için nasıl iyi bir cevap yazarım? Bölümünü okuyun .
Roshana Pitigala

Sadece gradle dosyalarını senkronize etmeniz gerekmez
steve moretz

75

Buradaki çözümler bana yardımcı olmadı, ama bu bağlantı işe yaradı.

Bazı android .so dosyaları ekleyen bir kütüphaneniz varsa - libassmidi.soya da libgnustl_shared.so- gradle'ı paketlerken sadece bir tane seçmesini söylemelisiniz , aksi takdirde çatışmayı alırsınız.

android {
  packagingOptions {
    pickFirst 'lib/armeabi-v7a/libassmidi.so'
    pickFirst 'lib/x86/libassmidi.so'
  }
}

Bir React Native uygulamasını bir Android projesinde kütüphane olarak kullanırken bu sorunu yaşıyordum. Umarım yardımcı olur


2
Teşekkür ederim, sadece bir .so dosyasıyla aynı sorunu yaşadım. Aynı klasörde gdbserver adında başka bir dosya var ve kitaplık için packingOptions eklendikten sonra şimdi çalışıyor.
Bay Fish

1
Teşekkür ederim! İç içe bağımlılık olarak bir JNA aar vardı yardımcı oldu
faisal00813

31

Benzer bir mesajı vardı

Hata: ': app: transformResourcesWithMergeJavaResForDebug' görevi için yürütme başarısız oldu. İşletim sistemi bağımsız 'sabit-değerleri.html' yolu ile birden fazla dosya bulundu

Çözmek için Android Studio'da paketler görünümünü ( 1 ) etkinleştirmem , sonra ağaçtan kütüphanelere göz atmam ve kopyaları bulmam gerekiyordu ( 2 )

Ardından, ctrl + alt + f12 (veya RMB menüsü) ( 3 ) - ve soruna neden olan kütüphaneler bulundu. Sorunlara neden olan bu kütüphanelerin içindeki dosyaların listesini hazırladı ve bunları android bölümü içinde uygulamanın build.gradle dosyasına yazdı . Diğer seçenek, yinelenen dosyalar içeren kütüphaneyle uğraşmaktır

packagingOptions {
    exclude 'allclasses-frame.html'
    exclude 'allclasses-noframe.html'
    <..>

resim açıklamasını buraya girin


1
"Sonra ağaçta kütüphanelere göz atar ve kopyaları nasıl bulursunuz?" Tüm klasörlerdeki tüm dosyaları gerçekten gözden geçirdiniz mi?
android geliştirici

1
Ayrıca "kopyaları bulma" konusunda da kafam karıştı. Uygulama / Kütüphaneler'de belki 100 alt giriş var ... biri kopyaları bulma konusunda nasıl gidiyor?
Freewalker

28

Temelde gradle apk dosyasını bir araya getirdiğinde, tüm derleme bağımlılıklarından içerik kopyalar, İki farklı jar dosyasından yinelenen bir file..coming olduğunu görmek için yeterince akıllıdır. Bu, a.txt veya META-INF / DEPENDENCIES gibi herhangi bir dosya olabilir. Dosyanın yalnızca bilgi amaçlı olması durumunda, bu dosyaları aşağıdakileri kullanarak hariç tutmak en iyisi olabilir.

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

Veya dosya, sınıf dosyası gibi zorunlu bir dosyaysa, birbiriyle ilişkili iki kavanoz bağımlılığı arasında çoğaltılmışsa, bu kavanozlara daha uyumlu bir versiyonda alternatifler bulmak en iyisidir.


Bunu projeme eklediğimde, yine çözemediğim başka bir hata alıyorum! Başka bir çözüm var mı?
hetsgandhi

Hetvi Gandhi, Gördüğün hata nedir?
ank

20

Aynı sorunu yaşıyordum ve bunu denedim

Hata: İşletim sistemi bağımsız 'META-INF / proguard / androidx-annotations.pro' yolu ile birden fazla dosya bulundu

Çözüm: Bunu düzeltmek için tek yapmanız gereken bunu uygulamanızın 'build.gradle' adresindeki android {} bölümüne eklemektir.

packagingOptions {
    exclude 'META-INF/proguard/androidx-annotations.pro'
}

18

Bu, kullanırken olur

org.jetbrains.kotlinx: kotlinx-eşyordamlar çekirdekli: 1.2.0

Ve sonraki sürümde düzeltildi

org.jetbrains.kotlinx: kotlinx-eşyordamlar çekirdekli 1.2.1


1
org.jetbrains.kotlinx ile benzer bir sorun: kotlinx-coroutines-core: 1.3.6 şu anki en son olan. sürüm düşürmek zorunda kaldı
farhan patel

Evet, aynı konu 1.3.6'da
Shefchenko

17

Aynı hatayla karşılaştım ve farklı modüllerden aynı sınıfları içeren farklı modüllerden kaynaklandığını gördüm .

Biri kullanılmış androidx paketi, diğeri kullanılmış androidx öncesi

Ben göç ederek çözdü öncesi-androidx modül için androidx kullanarak yerleşik Android Studio özelliği: "Elden Geçirme -> Androidx için Geçirme ..." hiçbir şey hariç olmadan.


Durumunuz için, modüller arasında herhangi bir bağımlılık uyuşmazlığı olup olmadığını kontrol edebilirsiniz.


1
AndroidX'e geçmek projenizi bozabileceğinden projenizin mevcut sürümünün bir yedeğini almayı unutmayın !
Kathir

12

Bu mesajı almakla ilgili tüm cevapları okudum Android Studio:

İşletim sistemi bağımsız yolu 'META-INF / LICENSE' ile birden fazla dosya bulundu

ancak bu durumda sınıfları hariç tutmak gerekli değildir, sadece hariç tutmamız gerekir 'META-INF/DEPENDENCIES', bu aşağıdakilerin içinde yapılabilir /app/build.gradle:

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

}


11

Studio'yu Java 7'den Java 8'e güncelledim ve bu sorun oluştu. Sonra bu şekilde çözdüm:

android {
    defaultConfig {
    }
    buildTypes {
    }
    packagingOptions{
        exclude 'META-INF/rxjava.properties'
    }
}

8

Benim app, böyle kavanoz bağımlılıkları ekliyordum:

implementation files('libs/json-simple-1.1.1.jar')

Ancak, bağımlılıklarda aşağıdaki ilk satır nedeniyle zaten eklendiğini fark ettim:

implementation fileTree(include: ['*.jar'], dir: 'libs')

Bu satır, lib klasöründeki tüm kavanozları uygulama bağımlılığına ekler.

Ekstra bağımlılığı kaldırdıktan sonra implementation files('libs/json-simple-1.1.1.jar')

iyi çalışıyor.


Bu yardımcı olur, ancak cevapla ilgili değildir. Kütüphanelerde, isim ve formatta benzer olabilen META-INF meta klasörlerini bulabilirsiniz. Bunlar çift dosya sorunu neden dolayısıyla kaldırılması gerekir.
Abhinav Saxena

7

Birden çok modül uygulama ortamında benzer bir sorunla karşılaştım:

Hata: ': app: transformResourcesWithMergeJavaResForDebug' görevi için yürütme başarısız oldu. İşletim sistemi bağımsız yolu 'META-INF / AL2.0' ile birden fazla dosya bulundu

Bu sorun bu modüllerimden birkaçı tarafından bildiriliyordu ve yukarıdaki çözümlerin hiçbiri bunu düzeltmiyordu. Görünüşe göre, kullandığım kütüphanelerin başkaları tarafından zaten gömülü olan META-INF / AL2.0'ı gömüyor gibi görünen Coroutines 1.3.6 sürümünü kullanıyordum. Düzeltmek için, başarısız olan modülün build.gradle aşağıdaki kod parçacığını ekledim:

configurations.all {
    resolutionStrategy {
        exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-debug"

    }
}

Birden fazla modülde gerçekleştiği göz önüne alındığında, bu resolutionStrategykodu proje düzeyim build.gradle'a taşıdım. Bundan sonra her şey çalıştı.


4

Aynı problemim var ve bunu denedim

Hata: İşletim sistemi bağımsız yolu 'META-INF / library_release.kotlin_module' ile birden fazla dosya bulundu

Çözüm:

android {
    packagingOptions {
    exclude 'META-INF/library_release.kotlin_module'
    }
}

3

Benzer bir sorun yaşadım. hata mesajını alıyordum -

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.

More than one file was found with OS independent path 'javax/annotation/WillCloseWhenClosed.java'

Yukarıdaki cevapların bazılarında belirtildiği gibi, aşağıdaki kod kullanılır

'packagingOptions {
       exclude 'allclasses-frame.html'
    }'

Ancak 20 farklı dosya için bu hatayı alıyordum, bu yüzden 20 dosya hariç tutulduktan sonra durdum ve iyi bir çözüm bulmaya çalıştım. Ben de karşılaşmıştım

'Unable to execute dex: Multiple dex files' error.

Sonunda bunu çözmeyi başardım.

Öncelikle (benim durumumda olduğu gibi WillCloseWhenClosed.java yinelenen dosyaydı), android stüdyosunda 'her yerde arama' seçeneğiniz var. Dosyayı buraya yazın ve arayın. Orada bu dosyanın birden çok örneğini buldum. Bu yüzden her iki örneği de tıkladım ve android stüdyosunda açtıklarında dosyayı sağ tıklayıp konumunu görerek konumlarını gördüm.

İkincisi, gradle dosyasında bazı bağımlılıklar olduğunu anladım. Aşağıdaki kodu kullanıyordum

dependencies {
    compile 'com.google.api-client:google-api-client:1.23.0'
}

ve aynı yerde kendi zip paketleri vardı: \ Users \ kullanıcı \ AndroidStudioProjects \ git \ appname \ app \ libs \ google-http-client-1.23 !.

Bu gereksizdi ve bu yüzden gradle 2 dosya buluyor. Bu yüzden zip paketlerimi sildim ve benim için hataları çözdü. Bunu yaparken dikkatli olun. Silinecek doğru dosya veya paketin hangisi olduğunu bulmalısınız.

Üçüncüsü, gradle da bu konumdaki bu hata dosyalarının bir zipini yapar (En azından benim için yapıldı) - C: \ Program Files \ Android \ Android Studio \ gradle \ m2repository \ com \ google \ code \ findbugs \ jsr305 \ 1.3. 9 \ jsr305-1.3.9.jar!

bu yüzden gittim ve buradan da jsr305-1.3.9.jar dosyasını sildim.

Hala kafanız karıştıysa, sadece android stüdyoda 'her yerde ara' gidin, dosyanızın örneklerini orada bulun ve bunlardan birini silmeniz gerekir. Acele etmeyin ve hangisini bulun.


3

Ekleme

android.useAndroidX = true

android.enableJetifier = true

özellikler benim için çalıştı.


1

Bu sorunla ilk olarak bazı yerel kütüphaneler (.so dosyaları) ve sonra java / kotlin dosyalarıyla karşılaştım. Görünüşe göre, kaynağından bir kütüphane ve geçişli bir bağımlılık yoluyla yapay olarak referansta bulundum. Gereksiz girdiler olup olmadığını görmek için bağımlılık ağacınızı kontrol edin. ./gradlew :app:dependenciesBağımlılık ağacını almak için kullanın . Ana modül adı farklıysa "app" yerine modül adınızı yazın.


1

Build.gradle android cihazınızda minimum Android sürümünü> = 21 değiştirmeyi deneyin {}


1

Android {} içindeki uygulama düzeyi gradel dosyasında aşağıdakileri ekleyin

packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
        exclude("META-INF/*.kotlin_module") 
      } 

0

Multidex'i varsayılan yapılandırmadan kaldırmayı ve derleme hata günlüğünü kontrol etmeyi deneyin. Bu günlük INotification sınıfıyla ilişkilendirilebilir. Bunu androidde kullan {}

configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4'
}

Bu bana yardımcı oluyor.


0

Benim için aşağıda çözüm çalıştı da yardım alabilirsiniz, ben app gradle dosyasında satırın altına yazdım

  packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }

0

Kabloluydum, ancak projem zaten AndroidX'e taşındı, ancak tekrar androidX'e geçtikten sonra, projemin bir kısmını yeniden düzenledi ve sorun çözüldü.


0

Aşağıdaki kodu app.gradle dosyasına ekleyin, bu tüm kütüphane bağımlılığı hatalarını çözecektir

   packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/ASL2.0'
    exclude("META-INF/*.kotlin_module")
    exclude 'META-INF/library_release.kotlin_module'
    pickFirst 'lib/armeabi-v7a/libavdevice.so'
    pickFirst 'lib/armeabi/libavdevice.so'
    pickFirst 'lib/armeabi/libswresample.so'
    pickFirst 'lib/armeabi-v7a/libswresample.so'
    pickFirst 'lib/armeabi/libswscale.so'
    pickFirst 'lib/armeabi/libavcodec.so'
    pickFirst 'lib/armeabi-v7a/libavutil.so'
    pickFirst 'lib/armeabi/libavutil.so'
    pickFirst 'lib/armeabi-v7a/libavformat.so'
    pickFirst 'lib/armeabi/libavfilter.so'
    pickFirst 'lib/armeabi/libavformat.so'
    pickFirst 'lib/armeabi-v7a/libavcodec.so'
    pickFirst 'lib/armeabi-v7a/libswscale.so'
    pickFirst 'lib/armeabi/libpostproc.so'
    pickFirst 'lib/armeabi-v7a/libpostproc.so'
    pickFirst 'lib/armeabi-v7a/libavfilter.so'
}

-1

benim için .txt yerine .md idi

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

-1

Bu soruna ilişkin SO'daki cevapların çoğunda eklenmesi exclude 'META-INF/DEPENDENCIES've diğer bazı dışlamalar önerilmiştir . Ancak bunların hiçbiri benim için çalışmadı. Benim durumumda böyle oldu:

Bunu bağımlılıklarda eklemiştim:

implementation 'androidx.annotation:annotation:1.1.0'

Ve bunu gradle.properties içine ekledim:

android.useAndroidX=true

Bunların her ikisini de ekledim, çünkü derleme hatası alıyordum çünkü 'sembol sınıfı Nullable'ı bulamıyorum' ve buradaki bazı cevaplarda buna çözüm olarak önerildi

Ancak, sonunda hata almak indi:

 More than one file was found with OS independent path 'androidsupportmultidexversion.txt'

Hayır excludebenim için çalışıyordu. Sonunda sadece şüphe dışında bu ek satırları kaldırdım (Çözüldü 'sembol sınıfı Nullable' bulamazsınız alternatif bir şekilde) ve nihayet bu "OS ile birden fazla dosya bulundu ..." inşa hatası kurtuldum. Saatlerce harcadım. Ama sonunda ondan kurtuldum.


-1

Temiz Projeden sonra Önbelleği ve Yeniden Başlatmayı Geçersiz Kılmanız gerekir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.