Lebih dari satu file ditemukan dengan jalur independen OS 'META-INF / LICENSE'

333

Ketika saya membangun aplikasi saya, saya mendapatkan kesalahan berikut:

Kesalahan: Eksekusi gagal untuk tugas ': app: transformResourcesWithMergeJavaResForDebug'. Lebih dari satu file ditemukan dengan jalur independen OS 'META-INF / LICENSE'

Ini adalah file build.gradle saya:

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

Ketika saya menambahkan kode ini ke file build.gradle saya,

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

Kesalahan ini akan diselesaikan, tetapi masalah lain akan terjadi. Seperti ini:

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)

Siapa yang punya ide bagaimana menyelesaikan ini?

Cyrus
sumber
Saya menghadapi masalah yang sama ketika mengakses Perpustakaan Klien API Google untuk Android. Memecahkan masalah dengan mengecualikan modul HttpClient dari dependensi gradle. Rujuk dokumen Google untuk detail lebih lanjut. Developer.google.com/api-client-library/java/… cari di halaman dokumen dengan "Di Android, Anda harus secara eksplisit mengecualikan dependensi yang tidak digunakan:"
mifthi

Jawaban:

493

Anda dapat menambahkan ini di yourProject/app/build.gradledalamandroid{}

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") 
      }          
}
Shaaban Ebrahim
sumber
23
Bisakah Anda jelaskan mengapa ini berhasil dan apa arti "META-INF"? Terima kasih!
Shreshth Kharbanda
@CodeSlave menyebabkan beberapa masalah dengan apk jika kami tidak mengecualikan file tesis dari google.github.io/android-gradle-dsl/current/… Kecualikan Jalur yang cocok dengan pola kecualikan tidak akan disertakan dalam APK. itu yang saya tahu. Saya belum memiliki ide lengkap tentang masalah ini
Shaaban Ebrahim
11
Meskipun ini dapat menjawab pertanyaan, lebih baik menambahkan deskripsi tentang bagaimana jawaban ini dapat membantu menyelesaikan masalah. Silakan baca Bagaimana saya menulis jawaban yang bagus untuk mengetahui lebih banyak.
Roshana Pitigala
3
Dalam kasus saya, saya juga perlu menambahkan 'META-INF / LICENSE.md' dan 'META-INF / LICENSE-notice.md'
Klyner
1
Tambahkan kecualikan ("META-INF / *. Kotlin_module") di daftar packaginOptions
Jaspal
129

Dalam kasus saya, cukup dengan mengecualikan hanya jalur 'META-INF / DEPENDENCIES' di yourProject/app/build.gradledalam android{} . Ini dia

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}

Dan kemudian lakukan Clean Project dan Rebuild Project.

Mara
sumber
11
Coba kecualikan 'META-INF / DEPENDENCIES' alih-alih mengecualikan 'META-INF / LICENSE'
Pelanes
7
Penjelasan tolong
Mohammad Ali
1
@SurSur mengecualikan file itu sehingga Anda melakukan kesalahan seperti dalam kode saya kesalahan yang sama untuk "META-INF / proguard / androidx-annotations.pro" file ini, dan kemudian saya menambahkan kecualikan 'META-INF / proguard / androidx-annotations. pro 'dan pekerjaannya.
Gunavant Patel
4
Meskipun ini dapat menjawab pertanyaan, lebih baik menambahkan deskripsi tentang bagaimana jawaban ini dapat membantu menyelesaikan masalah. Silakan baca Bagaimana saya menulis jawaban yang bagus untuk mengetahui lebih banyak.
Roshana Pitigala
Anda tidak perlu membersihkan hanya menyinkronkan file gradle
steve moretz
75

Solusi di sini tidak membantu saya, tetapi tautan ini berhasil.

Jika Anda memiliki pustaka yang menambahkan beberapa file .so android - seperti libassmidi.soatau libgnustl_shared.so- Anda harus memberi tahu gradle untuk memilih satu saja saat dikemas, jika tidak, Anda akan mendapatkan konflik.

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

Saya mengalami masalah ini ketika menggunakan aplikasi Bereaksi Asli sebagai perpustakaan di proyek Android. Semoga ini bisa membantu

Daniel Reina
sumber
2
Terima kasih, saya punya masalah yang sama dengan hanya satu file .so. Ada file lain yang disebut gdbserver di folder yang sama dan setelah menambahkan packagingOptions untuk pustaka itu berfungsi sekarang.
Tn. Fish
1
Terima kasih! Membantu ketika saya memiliki JNA aar sebagai dependensi bersarang
faisal00813
31

Punya pesan serupa

Kesalahan: Eksekusi gagal untuk tugas ': app: transformResourcesWithMergeJavaResForDebug'. Lebih dari satu file ditemukan dengan jalur independen OS 'constant-values.html'

Untuk mengatasinya, saya harus mengaktifkan tampilan paket ( 1 ) di Android Studio, lalu menelusuri pohon ke perpustakaan, dan menemukan duplikat ( 2 )

Kemudian, ctrl + alt + f12 (atau menu RMB) ( 3 ) - dan menemukan perpustakaan yang menyebabkan masalah. Membuat daftar file di dalam libs yang menyebabkan masalah, dan menulisnya ke file build.gradle aplikasi di dalam bagian android . Pilihan lain adalah berurusan dengan perpustakaan, yang berisi file duplikat

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

masukkan deskripsi gambar di sini

Dmitrii Chichuk
sumber
1
Bagaimana Anda "kemudian menelusuri pohon ke perpustakaan, dan menemukan duplikat"? Apakah Anda benar-benar memeriksa semua file di semua folder?
pengembang android
1
Saya juga bingung tentang "menemukan duplikat." Mungkin ada 100 subentri di aplikasi / Perpustakaan ... bagaimana cara menemukan duplikat?
Freewalker
28

Pada dasarnya ketika gradle menyatukan file apk, itu menyalin konten dari semua dependensi kompilasi, Cukup cerdas untuk melihat bahwa ada file duplikat. Berasal dari dua file jar yang berbeda. Ini bisa berupa file apa saja seperti a.txt atau META-INF / DEPENDENCIES. Mungkin lebih baik untuk mengecualikan file-file ini menggunakan di bawah ini, jika file tersebut ada di sana hanya untuk tujuan informasi.

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

Atau jika dalam kasus, file tersebut adalah file wajib seperti file kelas, yang telah diduplikasi di dua dependensi jar yang terkait satu sama lain, yang terbaik adalah menemukan alternatif untuk guci ini, dengan cara versi yang lebih kompatibel.

pergelangan kaki
sumber
Ketika saya menambahkan ini ke proyek saya, saya mendapatkan kesalahan lain yang lagi-lagi saya tidak dapat menyelesaikannya! Ada solusi lain?
hetsgandhi
Hetvi Gandhi, Apa kesalahan yang Anda lihat?
Pergelangan
20

Saya mengalami masalah yang sama dan saya mencoba ini

Kesalahan: Lebih dari satu file ditemukan dengan jalur independen OS 'META-INF / proguard / androidx-annotations.pro'

Solusi: Yang harus Anda lakukan untuk memperbaikinya adalah menambahkan ini ke bagian {} android di 'build.gradle' aplikasi Anda

packagingOptions {
    exclude 'META-INF/proguard/androidx-annotations.pro'
}
Apoorva Jain
sumber
18

Ini terjadi saat menggunakan

org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.2.0

Dan diperbaiki di versi berikutnya

org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.2.1

Vairavan
sumber
1
masalah serupa dengan org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.3.6 yang merupakan yang terbaru seperti sekarang. harus downgrade
farhan patel
Ya, masalah yang sama pada 1.3.6
Shefchenko
17

Saya telah mengalami kesalahan yang sama, dan saya menemukan bahwa itu dihasilkan dari berbagai modul berisi kelas yang sama dari paket yang berbeda .

mis. Satu paket Androidx digunakan, dan yang lain digunakan pra-Androidx

Saya menyelesaikannya dengan memigrasi modul pra-androidx ke androidx menggunakan fitur bawaan Android Studio: "Refactor -> Migrate to Androidx ..." tanpa mengecualikan apa pun.


Untuk situasi Anda, Anda dapat memeriksa apakah Anda memiliki ketidakcocokan ketergantungan antara modul.

Owen Chen
sumber
1
Jangan lupa untuk membuat cadangan dari versi proyek Anda saat ini karena bermigrasi ke AndroidX dapat merusak proyek Anda!
Kathir
12

Saya telah membaca semua jawaban terkait dengan mendapatkan pesan ini di Android Studio:

Lebih dari satu file ditemukan dengan jalur independen OS 'META-INF / LICENSE'

tetapi dalam kasus ini tidak termasuk kelas tidak perlu, kita hanya perlu mengecualikan 'META-INF/DEPENDENCIES', ini dapat dilakukan di dalam /app/build.gradle:

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

}
Jorgesys
sumber
Hal yang sama telah diceritakan dalam ratusan jawaban lain pada SO
Atul
11

Saya memperbarui Studio dari Java 7 ke Java 8, dan masalah ini terjadi. Lalu saya memecahkannya dengan cara ini:

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

Saya aplikasi saya, saya menambahkan dependensi jar seperti ini:

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

Tapi saya menyadari bahwa mereka sudah ditambahkan karena baris pertama berikut dalam dependensi:

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

Baris ini menambahkan semua stoples di folder lib ke ketergantungan aplikasi.

Karenanya setelah menghapus ketergantungan ekstra implementation files('libs/json-simple-1.1.1.jar')

itu bekerja dengan baik.

Sandeep Yohans
sumber
Ini membantu tetapi tidak terkait dengan jawabannya. Di perpustakaan, Anda menemukan file meta-folder META-INF yang dapat serupa dalam nama dan format. Ini menyebabkan masalah file duplikat karenanya harus dihapus.
Abhinav Saxena
7

Saya telah menghadapi masalah serupa yang bekerja di lingkungan aplikasi beberapa modul:

Kesalahan: Eksekusi gagal untuk tugas ': app: transformResourcesWithMergeJavaResForDebug'. Lebih dari satu file ditemukan dengan jalur independen OS 'META-INF / AL2.0'

Masalah ini dilaporkan oleh beberapa modul saya dan tidak ada solusi di atas yang memperbaikinya. Ternyata, saya menggunakan versi Coroutines 1.3.6 yang tampaknya menanamkan META-INF / AL2.0 yang sudah tertanam oleh perpustakaan lain yang saya gunakan. Untuk memperbaikinya, saya telah menambahkan potongan kode berikut ke build.gradle dari modul yang gagal:

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

    }
}

Mengingat hal itu terjadi pada beberapa modul, saya telah memindahkan resolutionStrategykode itu ke build.gradle tingkat proyek saya. Segalanya berhasil setelah itu.

Fred B.
sumber
4

Saya mengalami masalah yang sama dan saya mencoba ini

Kesalahan: Lebih dari satu file ditemukan dengan jalur independen OS 'META-INF / library_release.kotlin_module'

Larutan:

android {
    packagingOptions {
    exclude 'META-INF/library_release.kotlin_module'
    }
}
Bhavesh Moradiya
sumber
3

Saya punya masalah serupa. saya menerima pesan kesalahan -

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

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

Seperti yang dinyatakan dalam beberapa jawaban di atas, menggunakan kode di bawah ini berfungsi

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

Tetapi saya mendapatkan kesalahan ini untuk 20 file yang berbeda, jadi setelah mengecualikan 20 file, saya berhenti dan mencoba mencari solusi yang layak. Saya juga menemui

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

Saya akhirnya berhasil menyelesaikan ini.

Pertama (seperti dalam kasus saya WillCloseWhenClosed.java adalah file duplikat), di studio android Anda memiliki pilihan untuk 'mencari di mana-mana'. Tulis dan cari file di sana. Di sana saya menemukan beberapa contoh file ini. Jadi saya mengklik kedua contoh dan melihat lokasi mereka dengan mengklik kanan pada file dan melihat lokasinya ketika dibuka di android studio.

Kedua, saya tahu bahwa saya memiliki beberapa dependensi dalam file gradle. Saya menggunakan kode di bawah ini

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

dan juga saya punya paket zip yang sama di lokasi: \ Users \ user \ AndroidStudioProjects \ git \ appname \ app \ libs \ google-http-client-1.23 !.

Jadi ini mubazir dan itu sebabnya gradle menemukan 2 file. Jadi saya menghapus paket zip saya dan itu memecahkan kesalahan untuk saya. Hati-hati saat melakukan ini. Anda harus mencari tahu file atau paket mana yang benar untuk dihapus.

Ketiga, gradle juga membuat zip file bug ini di lokasi ini (Setidaknya bagi saya itu membuat) - C: \ Program Files \ Android \ Android Studio \ gradle \ m2pengaturan \ com \ google \ code \ findbugs \ jsr305 \ 1.3. 9 \ jsr305-1.3.9.jar!

jadi saya pergi dan menghapus file jsr305-1.3.9.jar dari sini juga.

Jika Anda masih bingung, buka saja 'cari kemana-mana' di studio android, temukan contoh file Anda di sana dan Anda harus menghapus salah satunya. Luangkan waktu Anda dan cari tahu yang mana.

Vi012
sumber
3

Menambahkan

android.useAndroidX = true

android.enableJetifier = true

untuk gradle.properties bekerja untuk saya.

Parag Jain
sumber
1

Saya menghadapi masalah ini, pertama dengan beberapa pustaka asli (file .so) dan kemudian dengan file java / kotlin. Ternyata saya termasuk perpustakaan dari sumber serta referensi artifactory melalui ketergantungan transitif. Periksa pohon dependensi Anda untuk melihat apakah ada entri yang berlebihan. Gunakan ./gradlew :app:dependenciesuntuk mendapatkan pohon dependensi. Ganti "aplikasi" dengan nama modul Anda jika nama modul utama berbeda.

ben_joseph
sumber
1

Coba ubah versi Android minimum> = 21 di build.gradle android {} Anda

Hanya tinhwa
sumber
1

Tambahkan berikut dalam file tingkat aplikasi di dalam 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") 
      } 
Mirza Ahmed Baig
sumber
0

Cobalah untuk menghapus multidex dari konfigurasi default dan periksa log kesalahan pembuatan. Jika log itu ada hubungannya dengan kelas INotification. Gunakan ini di android {}

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

Ini membantu saya.

Harsh Mittal
sumber
0

Bagi saya di bawah ini solusi berhasil, Anda mungkin mendapatkan bantuan juga, saya menulis di bawah ini di file gradle aplikasi

  packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
Jaykishan Sewak
sumber
0

Saya menggunakan kabel, tetapi proyek saya sudah dimigrasikan ke AndroidX, tetapi setelah bermigrasi ke AndroidX lagi, proyek ini refactored beberapa bagian dari proyek saya dan masalah diselesaikan.

SinaMN75
sumber
0

Tambahkan kode di bawah ini di app.gradle ini akan menyelesaikan semua kesalahan ketergantungan perpustakaan

   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'
}
sanjay
sumber
-1

bagi saya, itu .md daripada .txt

packagingOptions {
    exclude 'META-INF/LICENSE.md'
    exclude 'META-INF/NOTICE.md'
}
Amin Keshavarzian
sumber
-1

Dalam banyak jawaban pada SO tentang masalah ini disarankan untuk menambahkan exclude 'META-INF/DEPENDENCIES'dan beberapa pengecualian lainnya. Namun tidak ada yang bekerja untuk saya. Dalam skenario kasus saya adalah seperti ini:

Saya telah menambahkan ini di dependancies:

implementation 'androidx.annotation:annotation:1.1.0'

Dan juga saya telah menambahkan ini di gradle.properties:

android.useAndroidX=true

Kedua hal ini telah saya tambahkan, karena saya mendapatkan kesalahan build 'tidak dapat menemukan kelas simbol Nullable' dan disarankan sebagai solusi untuk ini pada beberapa jawaban seperti di sini

Namun, akhirnya saya mendapatkan kesalahan:

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

Tidak ada excludeyang berhasil untuk saya. Akhirnya saya hanya menghapus baris-baris yang ditambahkan di atas hanya karena kecurigaan (Dipecahkan 'tidak dapat menemukan kelas simbol Nullable' dalam beberapa cara alternatif) dan akhirnya saya menyingkirkan kesalahan pembuatan "Lebih dari satu file ditemukan dengan OS ...". Saya membuang-buang waktu saya. Tapi akhirnya menyingkirkannya.

Atul
sumber
-1

Anda hanya perlu memvalidasi Cache & Restart , setelah Proyek Bersih itu

E.Akkok
sumber