ปลั๊กอิน Android Gradle 0.7.0:“ ไฟล์ที่ซ้ำกันระหว่างการบรรจุ APK”


324

ใช้ Android Gradle plugin 0.7.0 ดังต่อไปนี้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
        ]
    }
}

ให้ข้อผิดพลาด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

เช้านี้สิ่งต่าง ๆ ทำงานได้ดีก่อนที่ฉันจะอัปเดต Android Studio ความคิดใด ๆ

แก้ไข: ฉันสามารถแก้ไขได้ชั่วคราวโดยเรียกใช้คำสั่งเช่น

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

จนกว่าข้อผิดพลาดที่ซ้ำกันทั้งหมดจะหายไป



2
นี้น่าจะเป็นข้อผิดพลาดcode.google.com/p/android/issues/detail?id=61573 ฉันไม่รู้ว่าทำไมมันเริ่มเป็นปัญหาสำหรับคุณในรุ่นนี้เท่านั้น
Scott Barta

ติดอยู่กับปัญหาเดียวกัน ตัดสินใจที่จะอยู่บน Android Studio 0.3.7 และปลั๊กอิน gradle 0.6.3 จนกว่าข้อผิดพลาดจะได้รับการแก้ไข
mente

6
คุณควรชัดเจนว่ากรมธรรม์ของคุณ: คุณไม่ได้ใช้ gradle 0.7.0 - เป็นปลั๊กอินสำหรับ Android gradle ซึ่งใช้ gradle (with wrapper) ในเวอร์ชัน 1.9.0 การใช้คำที่ไม่ถูกต้องจะทำให้เกิดความสับสน - นอกเหนือจากบริบทที่กำหนด
onigunn

1
โปรดทราบpickFirstตัวเลือกที่ใช้ได้ตั้งแต่Gradle 0.9.1
JJD

คำตอบ:


475

ตั้งแต่ Android Studio เวอร์ชัน 0.8.14

คุณควรเพิ่ม:

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

ไปยังbuild.gradleไฟล์ของคุณ

ประวัติความเป็นมา:

ตามความคิดเห็นที่ 14 ในข้อผิดพลาดนี้: https://issuetracker.google.com/issues/36982149#comment14นี่เป็นข้อผิดพลาดใน v0.7.0 ของปลั๊กอิน Android Gradle และจะมีการแก้ไขในเร็ว ๆ นี้ใน 0.7.1

นี่คือบันทึกจากข้อผิดพลาดที่เกี่ยวกับการเพิ่มสำหรับ 0.7.1:

0.7.1 ออกมาพร้อมกับการแก้ไขสำหรับเรื่องนี้

ไฟล์ DSL ที่ต้องการยกเว้นคือ:

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

คุณสามารถเพิ่มคำสั่งแยกได้มากเท่าที่คุณต้องการ ค่าคือพา ธ ไฟล์เก็บถาวร ยังไม่รองรับไวลด์การ์ดหรือ glob

ชื่อไฟล์ "LICENSE.txt" และ "NOTICE.txt" เป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ โปรดลองใช้ "license.txt" และ "notice.txt" เช่นกัน


12
ขอบคุณ! ฉันต้องยกเว้น 'META-INF / NOTICE.txt';)
Climbatize

71
นับวันฉันประหลาดใจกับการที่โปรแกรมเมอร์สามารถทำงานได้อย่างมีประสิทธิภาพจากระยะไกลก่อนที่จะมาถึงสแต็คโอเวอร์โฟลว์ ขอบคุณสำหรับการแก้ไข! ฉันต้องยกเว้น META-INF / LICENSE และ / NOTICE แทน (ไม่มี txt แม้ในระดับล่าสุด)
domenukk

3
ไฟล์ใดที่ฉันควรแก้ไขและสามารถพบได้ที่ไหน ขอบคุณ Eyal
อาย

2
@ um.anusorn Sean เป็นตัวอย่างที่ดีสำหรับไฟล์ gradle ที่แยกไฟล์เหล่านี้ออกจากไลบรารี่ในระหว่างการทำแพ็กเกจ นี่คือสิ่งที่ฉันมีอยู่ในของฉัน: packagingOptions {ยกเว้น 'META-INF / LICENSE' ยกเว้น 'META-INF / ประกาศ' ยกเว้น 'META-INF / DEPENDENCIES' ยกเว้น 'META-INF / license.txt' ยกเว้น 'META-INF / license.txt' dependenices.txt 'แยก' META-INF / notice.txt '}
praneetloke

4
ยังมีข้อผิดพลาดที่แพร่หลายใน v0.12 ของเครื่องมือที่สร้างขึ้น .. เพียงแค่พูด
Nilzor

149

ในกรณีของฉันฉันต้องรวมการยกเว้นเพิ่มเติมหลายประการ ดูเหมือนว่ามันจะไม่ชอบการแสดงออกปกติซึ่งจะทำให้นี่เป็นหนึ่งซับที่ดี

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

ฉันต้องการLICENSEและNOTICEหลังจากที่ฉันเพิ่มcommons-lang3เท่านั้น
theblang

อันนี้ช่วยฉันได้ (ฉันมีเทมเพลต AndroidAnnotations + Spring REST) ด้วยต้องเพิ่ม hacks ผลิตภัณฑ์ดังกล่าว IntelliJ นี้หวาดกลัวเริ่มที่จะมีลักษณะคล้ายกับคราส ...
javaxian

ไม่รู้ว่าอันไหนมีผลกระทบ แต่สิ่งนี้มีประโยชน์จริงๆ
CopperCash

ไม่ทำงานสำหรับฉันยังคงแสดงคำเตือน: การพึ่งพา org.apache.httpcomponents: httpclient: 4.3 ถูกละเว้นสำหรับการดีบักเนื่องจากอาจขัดแย้งกับเวอร์ชันภายในที่ Android จัดเตรียมไว้ ในกรณีที่มีปัญหากรุณา repackage ด้วย jarjar เพื่อเปลี่ยนแพ็กเกจคลาส
VVB

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

4
ฉันต้องการ.txtคำต่อท้าย
theblang

1
อย่างอื่นที่ฉันกำลังทำอยู่เพิ่งพาฉันกลับมาที่นี่และฉันไม่ต้องการ.txtคำต่อท้าย ดังนั้นฉันจึงเดาว่า YMMV (หรือ MMMV ขึ้นอยู่กับช่วงเวลาของปี)
theblang

31

ดูความคิดเห็นของ Sakiboy ได้ !


คำตอบที่ล้าสมัย

รองรับ Gradle 0.9.1 ดังต่อไปนี้:

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

ข้อมูลเพิ่มเติมได้ในบันทึกประจำรุ่น Gradle


3
นี่เป็นวิธีแก้ปัญหาที่ดีกว่าเนื่องจากนักพัฒนามีข้อผูกพันที่จะต้องรวมไฟล์เหล่านี้เมื่อใช้ซอฟต์แวร์โอเพ่นซอร์ส
Louth

1
ตัวเลือกที่ดี แต่ความคิดเห็นนี้ผิดทั้งหมด เฉพาะใบอนุญาตจากห้องสมุด firs เท่านั้นที่จะถูกรวมส่วนที่เหลือทั้งหมดจะถูกปล่อยออกไป
Igor Čordaš

1
สิ่งนี้มีประโยชน์หาก 2 ไลบรารีใช้ไฟล์. so เดียวกัน
Fabian

ฉันสามารถใช้สิ่งนั้นกับ JAR สองตัวที่มีไฟล์. class เดียวกันได้หรือไม่ ฉันมี JAR สองตัวรวมอยู่ด้วยซึ่งทั้งคู่มี org / xmlpull / v1 / XmlPullParser.class
WillC

2
@PSIXO คุณสามารถดูคำตอบด้านล่างหากคุณต้องการรวมใบอนุญาตทั้งหมด: stackoverflow.com/a/47828425/2371425
Sakiboy

12

ปัญหาเดียวกันเมื่อฉันส่งออกห้องสมุด httclient-4.3.5 ใน Android Studio 0.8.6 ฉันต้องการสิ่งนี้:

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

ไลบรารี zip เนื้อหาเป็น jar ถัดไป:

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

ข้อผิดพลาดนี้ยังคงมีอยู่ใน 0.8 + / 1.10

กับแจ็คสัน

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

ฉันต้องรวมถึงคำแนะนำข้างต้นก่อนที่จะรวบรวม

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

วิธีการยกเว้น 'META-INF / services / com.fasterxml.jackson.core.JsonFactory' ไฟล์ใดที่ฉันควรแก้ไข
อุมนุสรณ์

6

มันมีข้อผิดพลาดมากกว่าหนึ่งข้อ

ภายใต้ apply plugin: 'android-library'

เพิ่มสิ่งนี้ ::

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

ในกรณีของไฟล์ที่ซ้ำกันมันง่ายดูข้างJARใต้META-INFdir และดูว่าอะไรทำให้เกิดข้อผิดพลาด มันอาจจะเป็นหลาย ๆ ในกรณีของฉันปลั๊กอิน Couchbase Lite เมื่อคุณเพิ่มปลั๊กอินเพิ่มเติมคุณจะต้องมีข้อยกเว้นเพิ่มเติม


คำถามโง่ ๆ : ไฟล์ JAR นั้นอยู่ที่ไหน
WillC

ใน Android Studio การรัน Gradle ด้วยการ--info ตั้งค่าสถานะให้ฉันดูบันทึกการเรียนที่เพิ่มลงใน apk และจากนั้นฉันสามารถค้นหาขึ้นไปเพื่อค้นหารายการบันทึกสำหรับชั้นเรียนเดียวกันที่เพิ่มจาก JAR ที่แตกต่างกัน สิ่งนี้ยังแสดงเส้นทางของไฟล์ไปยังไฟล์ JAR ทั้งสองด้วย ฉันไม่พบวิธีที่ดีในการเลือกไฟล์. class มากกว่าไฟล์อื่นดังนั้นฉันจึงแก้ไขไฟล์ JAR ไฟล์ใดไฟล์หนึ่งและลบไฟล์. class ที่ซ้ำซ้อนออกไป
WillC

4

ปัญหาเดียวกันเมื่อฉันใช้ 'org.springframework.android:spring-android-rest-template:2.0.0.M1' ใน Android Studio 1.0.1 ฉันต้องการสิ่งนี้ในbuild.gradle

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


3

ฉันคิดว่าคุณต้องรวมเฉพาะตัวเลือกเหล่านี้ในbuild.gradle :

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

ป.ล. คำตอบเดียวกันจากโพสต์ของฉันใน: ข้อผิดพลาด :: ไฟล์ซ้ำกันในระหว่างการบรรจุ APK


2

ปัญหาคือว่าโฟลเดอร์ META-INF จะไม่ได้รับการกรองเพื่อให้หลายรายการNOTICEหรือLICENSEก่อให้เกิดซ้ำกันเมื่อมีการสร้างและมีการพยายามที่จะคัดลอกเข้าด้วยกัน

Dirty Quick Fix:

เปิด.jarไฟล์ใน.gradle/caches/...โฟลเดอร์ของคุณ(ด้วยเครื่องมือที่รองรับ zip) และลบหรือเปลี่ยนชื่อไฟล์ในMETA-INFโฟลเดอร์ที่ทำให้เกิดข้อผิดพลาด (ปกติNOTICEหรือLICENSE) (ฉันรู้ว่ายังอยู่ใน OP แต่สำหรับฉันมันไม่ชัดเจนจริงๆจนกว่าฉันจะอ่านฟอรัม google

แก้ไข:

สิ่งนี้ได้รับการแก้ไขใน 0.7.1 เพียงเพิ่มไฟล์ที่สับสนเพื่อแยกออก

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

ขอโทษทีฉันเพิ่งเข้าใจตอนนี้
อุมนุสรณ์

อาจเป็นคำตอบที่แย่ที่สุด: การเปลี่ยนไหใน gradle cache อาจเปลี่ยน checksum และผลที่ตามมาจะไม่ได้ผลอีกต่อไป ... นอกจากนี้ยังไม่ใช่ไหของคุณ
Riduidel

ใช่นั่นคือเหตุผลที่มันบอกว่า "Dirty Quick Fix" เป็นตัวอักษรหนา ด้วยวิธีแก้ปัญหาที่ถูกต้องเป็นเพียงย่อหน้าออกไป คุณทราบดีว่าเขียนขึ้นในเวลาที่ไม่มีวิธีแก้ปัญหาที่ดี แต่ผู้คนยังต้องรวบรวมแอพของพวกเขา
Patrick Favre

2

กันที่นี่ด้วย

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

ฉันหลงทางเหมือน 2 วันสำหรับข้อผิดพลาดแปลก ๆ ... ทำไมสิ่งนี้ยังเกิดขึ้นในระดับ 1.0.0 นั่นน่ารำคาญสำหรับมือใหม่ ... อย่างไรก็ตามขอบคุณสำหรับข้อมูลที่ฉันคิดว่ามันเป็นรหัสของฉัน :)


2

สิ่งสำคัญที่ควรทราบในข้อผิดพลาดนี้คือไฟล์ใด (ตัวอย่างเช่นคุณคือ META-INF / LICENSE.txt) ในกรณีของฉันคือ META-INF / LICENSE [ไม่มี ".txt"] จากนั้นในไฟล์ META-INF / ASL2.0 ดังนั้นฉันเพิ่มไปยัง build.gradle บรรทัดนี้:

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

สำคัญมาก (!) -> เพิ่มชื่อของไฟล์ในสไตล์เดียวกับที่คุณเห็นในข้อความแสดงข้อผิดพลาด: ข้อความเป็นตัวพิมพ์ใหญ่และตัวพิมพ์เล็กและมีความแตกต่างระหว่าง * .txt และ * (โดยไม่มี "txt") .


2

apkหากคุณต้องการที่จะทำส่วนของคุณเป็นนักพัฒนาใช้ห้องสมุดมาเปิดคุณควรพยายามรวมถึงทุกคนที่ใบอนุญาตมาเปิดภายในของคุณ การทำเช่นนี้คุณสามารถใช้การผสานpackagingOptionsวิธีการในของคุณ

ตัวอย่าง:

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

คำตอบนี้ดีกว่าการใช้pickFirstเพราะวิธีการนั้นเลือกเฉพาะลิขสิทธิ์แรกที่พบและไม่สนใจส่วนที่เหลือทั้งหมด

ดังนั้นในระยะสั้นให้ใช้mergeวิธีการรวมใบอนุญาตเหล่านั้นทั้งหมดจากห้องสมุดโอเพนซอร์ส kickass ที่คุณได้ใช้

ข้อมูลเพิ่มเติมเกี่ยวกับPackagingOptionsGradle


2

ฉันสังเกตเห็นว่าคอมเม้นท์นี้ใน AOSP วิธีแก้ปัญหาคือการแยกไฟล์บางไฟล์โดยใช้ DSL อาจเป็นได้เมื่อปล่อย 0.7.1

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

ใช่และพวกเขาเพิ่งเขียนบันทึกประจำรุ่นในเว็บไซต์สร้างดังนั้นหวังว่าพวกเขาจะอัปโหลดสิ่งประดิษฐ์ไปยังศูนย์กลางของคนในไม่ช้าเพื่อเราจะได้ใช้สิ่งนี้!
Matt Wolfe

1

ในกรณีของฉันฉันจะต้องเพิ่มไปยังไฟล์ build.gradle ของโครงการ:

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

   ...
}

0

ใน Android Studio 1.1.0 ฉันต้องการชื่อตัวพิมพ์เล็ก:

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

0

ไฟล์ "LICENSE.txt" และ "NOTICE.txt" เป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ดังนั้นสำหรับ SPring ห้องสมุด android ฉันต้องเพิ่ม

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

0

การลบ. txt หลังจาก LICENSE ได้ลบข้อผิดพลาดของฉัน:

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'
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.