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

a. hitam13
sumber
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.

biniam
sumber
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

RS
sumber
23

tambahkan saja

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

di build.gradle

shankey
sumber
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'
    }
}
AlfredZhong
sumber
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')
}
Dhiral Pandya
sumber
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

Jan Wilmans
sumber
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)

Shreekant N
sumber
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'
}
Suresh Sarak
sumber
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

Gajendra kumar
sumber
3

Saya hanya menambahkan 2:

android{

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

}
josedlujan
sumber
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.

Android Amature
sumber
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")
Olcay Ertaş
sumber
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 "**"
    }
}
Mapsy
sumber