Plugin Android Gradle 0.7.0: “duplikat file selama pengemasan APK”


324

Menggunakan plugin Android Gradle 0.7.0 dengan yang berikut build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.0'
    }
}

apply plugin: 'android'

repositories {
    maven { url "https://android-rome-feed-reader.googlecode.com/svn/maven2/releases" }
    maven { url "http://dl.bintray.com/populov/maven" }
    mavenCentral()
}

android {
    compileSdkVersion 19
    buildToolsVersion '18.1.1'

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 19
    }
    buildTypes {
        release {
            runProguard true
            proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
        }
    }
    productFlavors {
        defaultFlavor {
            proguardFile 'proguard-rules.txt'
        }
    }
    sourceSets {
        instrumentTest.setRoot('src/instrumentTest')
    }
}

configurations {
    apt
}

ext.androidAnnotationsVersion = '2.7.1';

dependencies {
    compile 'com.android.support:support-v4:18.0.0'

    compile 'com.viewpagerindicator:library:2.4.1@aar'

    compile 'com.google.code.android-rome-feed-reader:android-rome-feed-reader:1.0.0-r2'
    compile 'org.jdom:jdom:1.1.1-android-fork'

    apt "com.googlecode.androidannotations:androidannotations:${androidAnnotationsVersion}"
    compile "com.googlecode.androidannotations:androidannotations-api:${androidAnnotationsVersion}"

    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.j256.ormlite:ormlite-android:4.47'
    compile 'com.j256.ormlite:ormlite-core:4.47'
    compile 'org.springframework.android:spring-android-core:1.0.1.RELEASE'
    compile 'org.springframework.android:spring-android-rest-template:1.0.1.RELEASE'
    compile 'com.prolificinteractive:actionbarsherlock:4.3.1@aar'

    compile 'com.google.code.geocoder-java:geocoder-java:0.15'

    compile files('libs/CWAC-Pager.jar')
}

android.applicationVariants.all { variant ->
    aptOutput = file("${project.buildDir}/source/apt_generated/${variant.dirName}")
    println "****************************"
    println "variant: ${variant.name}"
    println "manifest:  ${variant.processResources.manifestFile}"
    println "aptOutput:  ${aptOutput}"
    println "****************************"

    variant.javaCompile.doFirst {
        println "*** compile doFirst ${variant.name}"
        aptOutput.mkdirs()
        variant.javaCompile.options.compilerArgs += [
                '-processorpath', configurations.apt.getAsPath(),
                '-AandroidManifestFile=' + variant.processResources.manifestFile,
                '-s', aptOutput
        ]
    }
}

memberikan kesalahan Duplicate files copied in APK META-INF/LICENSE.txt:

WARNING: Dependency commons-logging:commons-logging:1.0.4 is ignored for defaultFlavorDebug as it may be conflicting with the internal version provided by Android.
         In case of problem, please repackage it with jarjar to change the class packages
WARNING: Dependency commons-logging:commons-logging:1.0.4 is ignored for defaultFlavorRelease as it may be conflicting with the internal version provided by Android.
         In case of problem, please repackage it with jarjar to change the class packages
Creating properties on demand (a.k.a. dynamic properties) has been deprecated and is scheduled to be removed in Gradle 2.0. Please read http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html for information on the replacement for dynamic properties.
Deprecated dynamic property: "aptOutput" on "com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@5705013c", value: "/Users/david/Developer...".
****************************
variant: defaultFlavorDebug
manifest:  /Users/david/Developer/.../build/manifests/defaultFlavor/debug/AndroidManifest.xml
aptOutput:  /Users/david/Developer/.../build/source/apt_generated/defaultFlavor/debug
****************************
Deprecated dynamic property "aptOutput" created in multiple locations.
****************************
variant: defaultFlavorRelease
manifest:  /Users/david/Developer/.../build/manifests/defaultFlavor/release/AndroidManifest.xml
aptOutput:  /Users/david/Developer/.../build/source/apt_generated/defaultFlavor/release
****************************
:TravelGuard:compileDefaultFlavorDebugNdk UP-TO-DATE
:TravelGuard:preBuild UP-TO-DATE
:TravelGuard:preDefaultFlavorDebugBuild UP-TO-DATE
:TravelGuard:preDefaultFlavorReleaseBuild UP-TO-DATE
:TravelGuard:prepareComProlificinteractiveActionbarsherlock431Library UP-TO-DATE
:TravelGuard:prepareComViewpagerindicatorLibrary241Library UP-TO-DATE
:TravelGuard:prepareDefaultFlavorDebugDependencies
:TravelGuard:compileDefaultFlavorDebugAidl UP-TO-DATE
:TravelGuard:compileDefaultFlavorDebugRenderscript UP-TO-DATE
:TravelGuard:generateDefaultFlavorDebugBuildConfig UP-TO-DATE
:TravelGuard:mergeDefaultFlavorDebugAssets UP-TO-DATE
:TravelGuard:mergeDefaultFlavorDebugResources UP-TO-DATE
:TravelGuard:processDefaultFlavorDebugManifest UP-TO-DATE
:TravelGuard:processDefaultFlavorDebugResources UP-TO-DATE
:TravelGuard:generateDefaultFlavorDebugSources UP-TO-DATE
:TravelGuard:compileDefaultFlavorDebugJava
*** compile doFirst defaultFlavorDebug
/Users/david/Developer/.../src/main/java/com/travelguard/service/TravelGuardService.java:53: cannot find symbol
symbol  : class TravelGuardPrefs_
location: class com.travelguard.service.TravelGuardService
    TravelGuardPrefs_ travelGuardPrefs;
    ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CategoriesActivity.java:14: cannot find symbol
symbol  : class AssistanceFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.AssistanceFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CategoriesActivity.java:16: cannot find symbol
symbol  : class CategoryFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.CategoryFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CategoriesActivity.java:17: cannot find symbol
symbol  : class ContactFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.ContactFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CountriesActivity.java:25: cannot find symbol
symbol  : class TravelGuardPrefs_
location: package com.travelguard.service
import com.travelguard.service.TravelGuardPrefs_;
                              ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CountriesActivity.java:44: cannot find symbol
symbol  : class TravelGuardPrefs_
location: class com.travelguard.ui.CountriesActivity
    TravelGuardPrefs_ travelGuardPrefs;
    ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/InstructionsActivity.java:18: cannot find symbol
symbol  : class AssistanceFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.AssistanceFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/InstructionsActivity.java:19: cannot find symbol
symbol  : class ContactFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.ContactFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/InstructionsActivity.java:21: cannot find symbol
symbol  : class InstructionsFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.InstructionsFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:36: cannot find symbol
symbol  : class TravelGuardPrefs_
location: package com.travelguard.service
import com.travelguard.service.TravelGuardPrefs_;
                              ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:40: cannot find symbol
symbol  : class AssistanceFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.AssistanceFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:41: cannot find symbol
symbol  : class ContactFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.ContactFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:55: cannot find symbol
symbol  : class TravelGuardPrefs_
location: class com.travelguard.ui.MainActivity
    TravelGuardPrefs_ travelGuardPrefs;
    ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/TermsActivity.java:17: cannot find symbol
symbol  : class TravelGuardPrefs_
location: package com.travelguard.service
import com.travelguard.service.TravelGuardPrefs_;
                              ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/TermsActivity.java:23: cannot find symbol
symbol  : class TravelGuardPrefs_
location: class com.travelguard.ui.TermsActivity
    TravelGuardPrefs_ travelGuardPrefs;
    ^
Note: Starting AndroidAnnotations annotation processing
Note: AndroidManifest.xml file found: /Users/david/Developer/.../build/manifests/defaultFlavor/debug/AndroidManifest.xml
Note: Number of files generated by AndroidAnnotations: 22
Note: Generating source file: com.travelguard.service.SmartTravellerService_
Note: Generating source file: com.travelguard.service.SmartTravellerWebservice_
Note: Generating source file: com.travelguard.service.TravelGuardPrefs_
Note: Generating source file: com.travelguard.service.TravelGuardService_
Note: Generating source file: com.travelguard.service.TravelGuardWebservice_
Note: Generating source file: com.travelguard.ui.AdviceActivity_
Note: Generating source file: com.travelguard.ui.CategoriesActivity_
Note: Generating source file: com.travelguard.ui.ContactDetailActivity_
Note: Generating source file: com.travelguard.ui.ContactListActivity_
Note: Generating source file: com.travelguard.ui.ContactTravelGuardActivity_
Note: Generating source file: com.travelguard.ui.CountriesActivity_
Note: Generating source file: com.travelguard.ui.InformationActivity_
Note: Generating source file: com.travelguard.ui.InstructionsActivity_
Note: Generating source file: com.travelguard.ui.MainActivity_
Note: Generating source file: com.travelguard.ui.TermsActivity_
Note: Generating source file: com.travelguard.ui.TravelGuardActivity_
Note: Generating source file: com.travelguard.ui.fragments.AdviceDetailFragment_
Note: Generating source file: com.travelguard.ui.fragments.AdviceFragment_
Note: Generating source file: com.travelguard.ui.fragments.AssistanceFragment_
Note: Generating source file: com.travelguard.ui.fragments.CategoryFragment_
Note: Generating source file: com.travelguard.ui.fragments.ContactFragment_
Note: Generating source file: com.travelguard.ui.fragments.InstructionsFragment_
Note: Time measurements: [Whole Processing = 913 ms], [Generate Sources = 358 ms], [Extract Manifest = 163 ms], [Process Annotations = 158 ms], [Extract Annotations = 120 ms], [Validate Annotations = 82 ms], [Find R Classes = 28 ms],
Note: Time measurements: [Whole Processing = 0 ms],
Note: Time measurements: [Whole Processing = 0 ms],
warning: The following options were not recognized by any processor: '[androidManifestFile]'
Note: /Users/david/Developer/.../src/main/java/com/travelguard/ui/ContactDetailActivity.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: /Users/david/Developer/.../src/main/java/com/travelguard/service/SmartTravellerService.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
:TravelGuard:preDexDefaultFlavorDebug UP-TO-DATE
:TravelGuard:dexDefaultFlavorDebug
:TravelGuard:processDefaultFlavorDebugJavaRes UP-TO-DATE
:TravelGuard:validateDebugSigning
:TravelGuard:packageDefaultFlavorDebug
Error: duplicate files during packaging of APK /Users/david/Developer/.../build/apk/TravelGuard-defaultFlavor-debug-unaligned.apk
    Path in archive: META-INF/LICENSE.txt
    Origin 1: /Users/david/.gradle/caches/modules-2/files-2.1/commons-httpclient/commons-httpclient/3.1/964cd74171f427720480efdec40a7c7f6e58426a/commons-httpclient-3.1.jar
    Origin 2: /Users/david/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.2/397f4731a9f9b6eb1907e224911c77ea3aa27a8b/commons-codec-1.2.jar
:TravelGuard:packageDefaultFlavorDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':TravelGuard:packageDefaultFlavorDebug'.
> Duplicate files copied in APK META-INF/LICENSE.txt
    File 1: /Users/david/.gradle/caches/modules-2/files-2.1/commons-httpclient/commons-httpclient/3.1/964cd74171f427720480efdec40a7c7f6e58426a/commons-httpclient-3.1.jar
    File 2: /Users/david/.gradle/caches/modules-2/files-2.1/commons-httpclient/commons-httpclient/3.1/964cd74171f427720480efdec40a7c7f6e58426a/commons-httpclient-3.1.jar


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 21.957 secs

Segalanya bekerja dengan baik pagi ini sebelum saya memperbarui Android Studio. Ada ide?

EDIT: Saya bisa memperbaikinya untuk sementara waktu dengan menjalankan perintah like

zip -d spring-android-core-1.0.1.RELEASE.jar META-INF/notice.txt

sampai semua kesalahan duplikat hilang.



2
Ini sepertinya kode bug.google.com/p/android/issues/detail?id=61573 . Saya tidak tahu mengapa itu hanya mulai merepotkan bagi Anda dalam rilis ini.
Scott Barta

terjebak dengan masalah yang sama. Memutuskan untuk tinggal di Android Studio 0.3.7 dan Gradle Plugin 0.6.3 sampai bug diselesaikan
mente

6
Anda harus bebas dari kata-kata: Anda tidak menggunakan gradle 0.7.0 - ini adalah plugin android gradle. Yang menggunakan gradle (with wrapper) dalam versi 1.9.0. Kata-kata yang salah akan membingungkan - selain dari konteks yang diberikan.
onigunn

1
Harap perhatikan pickFirstopsi yang tersedia sejak Gradle 0.9.1 .
JJD

Jawaban:


475

Pada Android Studio versi 0.8.14

Anda harus menambahkan:

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

ke build.gradlefile Anda .

Sejarah:

Menurut komentar 14 dalam bug ini: https://issuetracker.google.com/issues/36982149#comment14 ini adalah bug di v0.7.0 dari plugin Android Gradle, dan akan segera diperbaiki di 0.7.1.

Berikut adalah catatan dari bug tentang penambahan untuk 0.7.1:

0.7.1 keluar dengan perbaikan untuk ini.

DSL untuk mengecualikan file adalah:

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

Anda dapat menambahkan pernyataan kecualikan sebanyak yang Anda inginkan. Nilai adalah jalur arsip. Belum ada wildcard atau dukungan glob.

Nama file "LICENSE.txt" dan "NOTICE.txt" peka huruf besar-kecil. Silakan coba dengan "license.txt" dan "notice.txt" juga.


12
Terima kasih! Saya juga harus mengecualikan 'META-INF / NOTICE.txt';)
Climbatize

71
Hari demi hari saya terkagum-kagum dengan bagaimana para programmer bisa menjadi produktif dari jauh sebelum stackoverflow tiba. Terima kasih untuk perbaikannya! Saya harus mengecualikan META-INF / LISENSI dan / PEMBERITAHUAN sebagai gantinya. (Tidak ada txt, bahkan pada gradle terbaru.)
domenukk

3
File apa yang harus saya edit dan di mana ia dapat ditemukan? terima kasih, Eyal.
eyal

2
@ um.anusorn Sean telah memberi Anda contoh yang baik untuk file gradle yang mengecualikan file-file ini dari perpustakaan selama pengemasan. Inilah yang saya miliki: packagingOptions {tidak termasuk 'META-INF / LICENSE' mengecualikan 'META-INF / PEMBERITAHUAN' mengecualikan 'META-INF / DEPENDENSI' mengecualikan 'META-INF / license.txt' mengecualikan 'META-INF / dependenices.txt 'mengecualikan' META-INF / notice.txt '}
praneetloke

4
Bug masih lazim di v0.12 alat dibangun .. Hanya mengatakan
Nilzor

149

Dalam kasus saya, saya harus memasukkan beberapa pengecualian tambahan. Tampaknya tidak menyukai ekspresi Reguler yang akan menjadikan ini garis satu bagus.

android {
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/LGPL2.1'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/notice.txt'
    }
}

Saya hanya perlu LICENSEdan NOTICEsetelah saya menambahkan commons-lang3.
theblang

Yang ini membantu saya (saya punya template AndroidAnnotations + Spring REST). Dengan harus menambahkan retasan seperti ini, produk IntelliJ ini mulai menyerupai Eclipse ...
javaxian

Tidak tahu yang mana yang memengaruhi, tetapi ini sangat membantu.
CopperCash

Tidak berfungsi untuk saya, masih menampilkan Peringatan: Ketergantungan org.apache.httpcomponen: httpclient: 4.3 diabaikan untuk debug karena mungkin bertentangan dengan versi internal yang disediakan oleh Android. Jika ada masalah, silakan bungkus kembali dengan jarjar untuk mengubah paket kelas
VVB

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

4
Saya membutuhkan .txtsufiks.
theblang

1
Sesuatu yang saya lakukan baru saja membawa saya kembali ke sini, dan saya tidak membutuhkan .txtsufiks. Jadi saya kira YMMV (atau MMMV tergantung pada waktu tahun).
theblang

31

Silahkan lihat pada komentar Sakiboy ini !


Jawaban yang ketinggalan jaman

Dari Gradle 0.9.1 berikut ini didukung:

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

Informasi lebih lanjut dalam catatan rilis Gradle .


3
Ini adalah solusi yang lebih baik karena pengembang berkewajiban untuk memasukkan file-file ini ketika mereka menggunakan perangkat lunak open source.
Louth

1
Opsi yang bagus, tetapi komentar ini sama sekali salah. Hanya lisensi dari perpustakaan pertama yang akan dimasukkan dan sisanya akan ditinggalkan.
Igor Čordaš

1
ini berguna jika 2 perpustakaan menggunakan file .so yang sama
Fabian

Bisakah saya menggunakannya untuk dua JAR yang berisi file .class yang sama? Saya memiliki dua JAR termasuk yang keduanya mengandung org / xmlpull / v1 / XmlPullParser.class
WillC

2
@PSIXO, Anda dapat melihat jawaban di bawah ini jika Anda ingin menyertakan SEMUA lisensi: stackoverflow.com/a/47828425/2371425
Sakiboy

12

Masalah yang sama ketika saya mengekspor perpustakaan httclient-4.3.5 di Android Studio 0.8.6 Saya perlu menyertakan ini:

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

Pustaka zip membuat isi jar berikutnya:

commons-codec-1.6.jar
commons-logging-1.1.3.jar
fluent-hc-4.3.5.jar
httpclient-4.3.5.jar
httpclient-cache-4.3.5.jar
httpcore-4.3.2.jar
httpmime-4.3.5.jar

8

Bug ini masih ada di 0,8 + / 1,10

Dengan Jackson

compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.2.2'

Saya harus memasukkan serta saran di atas sebelum akan dikompilasi

exclude 'META-INF/services/com.fasterxml.jackson.core.JsonFactory'

cara mengecualikan 'META-INF / services / com.fasterxml.jackson.core.JsonFactory'. File mana yang harus saya edit?
UmAnusorn

6

Ini lebih dari satu kesalahan

Dibawah apply plugin: 'android-library'

Tambahkan ini ::

android {
    packagingOptions {
        exclude 'META-INF/ASL2.0'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
}

Dalam hal duplikat file itu mudah, lihat di JARdalam META-INFdirektori dan lihat apa yang menyebabkan kesalahan. Bisa jadi banyak. Dalam kasus saya, plugin Couchbase Lite. Saat Anda menambahkan lebih banyak plugin, Anda akan membutuhkan lebih banyak pengecualian


Pertanyaan bodoh: di mana file JAR itu?
WillC

Di Android Studio, menjalankan Gradle dengan --info bendera, biarkan saya melihat log kelas yang ditambahkan ke apk, dan saya kemudian bisa mencari ke atas untuk menemukan entri log untuk kelas yang sama ditambahkan dari JAR yang berbeda. Ini juga menunjukkan saya path file ke kedua file JAR. Saya tidak dapat menemukan cara yang baik untuk memilih satu file .class di atas yang lain, jadi saya memodifikasi salah satu file JAR dan menghapus duplikat .class
WillC

4

Masalah yang sama ketika saya menggunakan 'org.springframework.android:spring-android-rest-template:.0.0.M1' di Android Studio 1.0.1. Saya perlu memasukkan ini ke dalambuild.gradle

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

3

Ini bekerja untuk saya:

android {
   packagingOptions {
       exclude 'LICENSE.txt'
   }
}


2

Masalahnya adalah bahwa folder META-INF tidak akan disaring sehingga banyak entri NOTICEatau LICENSEmenyebabkan duplikat saat membangun dan dicoba untuk menyalinnya bersama.

Perbaikan Cepat Kotor:

Buka .jarfile di .gradle/caches/...folder Anda (dengan alat yang kompatibel dengan zip) dan hapus atau ganti nama file di META-INFfolder yang menyebabkan kesalahan (biasanya NOTICEatau LICENSE). (Saya tahu itu juga di OP, tetapi bagi saya itu tidak benar-benar jelas sampai saya membaca forum google)

EDIT:

Ini diperbaiki di 0.7.1. Cukup tambahkan file confilcting untuk dikecualikan.

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

Oh maaf saya baru mengerti sekarang.
UmAnusorn

Mungkin jawaban yang paling buruk: mengubah toples dalam cache gradle dapat mengubah checksum mereka, dan sebagai akibatnya tidak akan bekerja lama ... selain itu, mereka bukan toples Anda
Riduidel

Ya, itu sebabnya tertulis "Perbaikan Cepat Kotor" dalam huruf tebal. Juga solusi yang tepat hanya berjarak satu paragraf. Anda menyadari bahwa itu ditulis pada saat tidak ada solusi bersih, tetapi orang masih perlu mengkompilasi aplikasi mereka.
Patrick Favre

2

Sama di sini dengan

dependencies {
    compile 'org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.0'
}

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

Saya kehilangan 2 hari untuk kesalahan aneh itu ... Mengapa ini masih terjadi di kelas 1.0.0? Itu sangat mengganggu bagi pemula ... Pokoknya, terima kasih untuk info yang saya pikir itu pada kode saya :)


2

Penting untuk mengetahui file apa yang menyebabkan kesalahan ini (dalam contoh Anda itu adalah META-INF / LICENSE.txt), dalam kasus saya ini ada di META-INF / LICENSE [tanpa ".txt"], lalu dalam file tersebut META-INF / ASL2.0 jadi saya menambahkan ke build.gradle baris saya ini:

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

Sangat penting (!) -> tambahkan nama file dengan gaya yang sama, yang Anda lihat dalam pesan kesalahan: teks peka huruf besar-kecil, dan ada perbedaan antara * .txt dan * (tanpa "txt") .


2

Jika Anda ingin melakukan bagian Anda sebagai pengembang, menggunakan pustaka sumber terbuka, Anda harus mencoba memasukkan semua lisensi sumber terbuka di dalam pustaka Anda apk. Untuk melakukan ini, Anda bisa menggunakan metode menggabungkan di packagingOptions.

Contoh:

packagingOptions {
        // This will get include every license and notice regardless of what dir it’s in.
        merge '**/LICENSE.txt'
        merge '**/NOTICE.txt'
        merge '**/notice.txt'
        merge '**/license.txt'
        merge '**/NOTICE'
        merge '**/LICENSE'
        merge '**/notice'
        merge '**/license'
        merge '**/LGPL2.1'
        // This will exclude any README files, regardless of the dir or the file type.
        exclude '**/README.*'
}

Jawaban ini lebih baik daripada menggunakan pickFirstkarena metode itu hanya mengambil lisensi pertama yang ditemukannya dan mengabaikan semua yang lain, agak menjadikannya tidak berguna dalam kasus ini.

Jadi singkatnya, gunakan mergemetode ini untuk memasukkan semua lisensi dari pustaka sumber terbuka kickass yang telah Anda gunakan.

Info lebih lanjut tentang Pilihan Gradle Pengemasan .


2

Saya perhatikan komentar komit ini di AOSP, solusinya adalah mengecualikan beberapa file menggunakan DSL. Mungkin ketika 0.7.1 dirilis.

commit e7669b24c1f23ba457fdee614ef7161b33feee69
Author: Xavier Ducrohet <--->
Date:   Thu Dec 19 10:21:04 2013 -0800

    Add DSL to exclude some files from packaging.

    This only applies to files coming from jar dependencies.
    The DSL is:

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

ya dan mereka baru saja menulis catatan rilis di situs build jadi mudah-mudahan mereka akan segera mengunggah artefak ke pakar pusat sehingga kita bisa menggunakan ini!
Matt Wolfe

1

Dalam kasus saya, saya hanya perlu menambahkan file build.gradle proyek:

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

   ...
}

0

Di Android Studio 1.1.0 saya membutuhkan nama huruf kecil:

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

0

File "LICENSE.txt" dan "NOTICE.txt" peka huruf besar-kecil. Jadi untuk perpustakaan android SPring saya harus menambahkan

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

0

Menghapus .txt setelah LICENSE menghapus kesalahan saya:

packagingOptions {
    exclude 'META-INF/LICENSE'
}

0
  packagingOptions {
    exclude 'META-INF/DEPENDENCIES.txt'
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/dependencies.txt'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/LGPL2.1'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/notice.txt'
}
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.