Android Studio 0.4 File duplikat yang disalin dalam APK META-INF / LICENSE.txt


115

Setelah saya memperbarui Studio saya dari 0.3.7 menjadi 0.4.0, saya tidak dapat mengkompilasi proyek saya. Saya menemukan solusi untuk stackoverflow: File duplikat disalin (Android Studio 0.4.0)

Saya memperbarui proyek saya ke gradle 0.7. +, Tetapi saya tidak tahu di mana saya harus meletakkan string berikutnya:

android {

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

Logcat saya: 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 Kembangkan di ubuntu 13.04


2
androidBagian dalam
Eugen Martynov

Terima kasih. Saya meletakkan blok packagingOptions () di file conf gradle utama. Pertama saya memasukkan blok ini ke dalam file gradle perpustakaan. Semua bekerja dengan sempurna =)
a.black13

Jawaban:


155

Menempatkan dependecies di bagian atas dan packageOptions di bagian akhir berhasil untuk saya.

apply plugin: 'android'. 

Ini adalah build.gradle lengkap saya di folder aplikasi.

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

EDIT: Hampir semua lisensi OS menyertakan kewajiban untuk "menyertakan salinan lisensi" ke dalam proyek Anda. Artinya, Anda harus menyertakan salinan semua lisensi OS yang Anda gunakan ke dalam proyek Anda. Dengan "mengecualikan" mereka dalam gradle, Anda melanggar lisensi.

Mengecualikan mereka dari proyek mungkin bukan pilihan terbaik. Terima kasih RS atas infonya.


2
@Andree Alasan kami mengecualikan file adalah karena kami tidak ingin file .txt (dan lainnya) disertakan dalam .apk yang akan dibuat oleh build.
biniam

4
exclude tidak dikenali di luar android {}: /
An-droid

4
Kecualikan harus ada di dalam android {}, maka hanya itu yang berhasil.
Pavan Pyati

2
! Solusi ini melanggar semua lisensi open source! Karena Anda diwajibkan untuk menambahkan teks lisensi asli dari setiap perpustakaan ke paket Anda
RS

2
Hai. Apa saja. Hampir semua lisensi OS menyertakan kewajiban untuk "menyertakan salinan lisensi" ke dalam proyek Anda. Artinya, Anda harus menyertakan salinan semua lisensi OS yang Anda gunakan ke dalam proyek Anda. Dengan "mengecualikan" mereka dalam gradle, Anda melanggar lisensi.
RS

47

Perhatian!! Kemungkinan pelanggaran lisensi OpenSource.

Dengan mengecualikan file license.txt seperti yang diusulkan di atas, Anda mungkin melanggar beberapa lisensi opensource karena adalah hal yang umum dalam lisensi opensource untuk setuju menambahkannya ke sumber Anda. Lebih baik periksa lisensi sumber terbuka Anda.

Pembaruan: Sampai ada solusi yang lebih baik, gunakan

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

seperti ini Anda setidaknya memenuhi sebagian dari kewajiban lisensi


23

tambahkan saja

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

di build.gradle


Kami melanggar lisensi sumber terbuka seperti ini
RS

16

Anda dapat memperbaikinya dengan menambahkan kode berikut ke 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'
    }
}

Hai. Masalah ini telah diperbaiki 1,5 tahun yang lalu Terima kasih atas jawabannya
a.black13

:-) Saya baru saja menemui masalah ini hari ini dan menemukan utas ini. Dan saya tidak memperhatikan tanggalnya.
AlfredZhong

Anda tidak memperhatikan tanggalnya DAN mengabaikan semua jawaban lainnya.
Tanggal

11

Saya menghadapi masalah yang sama seperti versi baru gradle, Di bawah build.gradle format teks berfungsi untuk saya:

Ada dua stoples jackson di folder libs saya.

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

Terima kasih! Aku membenturkan kepalaku pada ini selama ~ 5 jam hari ini. :) Itu packagingOptions { exclude 'libs/jackson...' }yang memperbaikinya.
CJBrew

8

Menambahkan:

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

bekerja untuk saya, solusi biniam_Ethiopia mungkin yang paling aman dari kegagalan


8

Saat memasukkan kode ini

android{

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

PASTIKAN jika dalam kesalahan itu menunjukkan

> File duplikat disalin dalam APK META-INF / LICENSE.txt

lalu tambahkan

 android{

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

}

jika dalam kesalahan itu ditampilkan

> File duplikat disalin dalam APK META-INF / LICENSE

lalu tambahkan

 android{

packagingOptions{
    exclude 'META-INF/LICENSE'
 }

}

jika dalam kesalahan itu ditampilkan

> File duplikat disalin dalam APK META-INF / license.txt

lalu tambahkan

 android{

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

}

Singkatnya CASE teks dan FORMAT dokumen (.txt) sangat penting.

(kesalahan ini juga ada di Android Studio 1.1.0)


6

Ini akan membantu Anda memecahkan masalah

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

mengapa ini memiliki begitu banyak suara negatif jika pada dasarnya sama dengan jawaban yang tepat?
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'
}

Tambahkan file build.gradle dan proyek syn


3

Saya hanya menambahkan 2:

android{

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

}

Apakah ini akan tetap disertakan, dalam produksi aplikasi?
RoCk RoCk

2

Saya memiliki kesalahan serupa dan menyelesaikannya tanpa fungsi packingOptions()dan exclude. Saya menambahkan dua dependensi tetapi yang satu adalah sub-grup dari yang pertama. Ini menyebabkan kesalahan, setelah saya menghapus salah satunya, saya mendapat build yang bersih. Saya sarankan untuk memeriksa kesalahan serupa dalam blok ketergantungan Anda.


Hai, saya telah mengatasi masalah ini sejak lama dengan menambahkan packingOptions (). Terima kasih atas jawabannya) +1
a.black13

Masalah ini diperbaiki dalam versi baru AS yang tersedia
a.black13

2

Saat menggunakan java-jwtdan jackson-corebersama - sama gunakan berikut ini:

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

Ini mungkin praktik yang sangat buruk, namun jika Anda menyertakan beberapa perpustakaan besar, Anda mungkin menemukan diri Anda sedang mengatasi ratusan jenis konflik ini.

Di bawah ini adalah perbaikan yang sangat sederhana untuk kasus-kasus seperti itu:

android { 
    ....
    packagingOptions {
        // Allow the compilation process to choose the dependencies for us.
        pickFirst "**"
    }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.