Android Studio 0.4 สำเนาไฟล์ที่คัดลอกใน APK META-INF / LICENSE.txt


115

หลังจากฉันอัปเดต Studio จาก 0.3.7 เป็น 0.4.0 แล้วฉันไม่สามารถรวบรวมโปรเจ็กต์ของฉันได้ ฉันพบวิธีแก้ปัญหาใน stackoverflow: คัดลอกไฟล์ซ้ำ (Android Studio 0.4.0)

ฉันอัปเดตโปรเจ็กต์ของฉันเป็น gradle 0.7 + แต่ฉันไม่รู้ว่าจะต้องวางสตริงต่อไปที่ใด:

android {

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

logcat ของฉัน: 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

ปล. พัฒนาใน ubuntu 13.04


2
androidส่วนภายใน
Eugen Martynov

ขอบคุณ ฉันใส่ block packagingOptions () ไว้ในไฟล์ gradle conf หลัก ก่อนอื่นฉันแทรกบล็อกนี้ในไฟล์ไลบรารี gradle งานทุกอย่างลงตัว =)
a.black13

คำตอบ:


155

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

apply plugin: 'android'. 

นี่คือ build.gradle ฉบับเต็มของฉันที่โฟลเดอร์แอพ

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

แก้ไข: ใบอนุญาตระบบปฏิบัติการเกือบทั้งหมดมีภาระผูกพันในการ "รวมสำเนาใบอนุญาต" ไว้ในโครงการของคุณ นั่นหมายความว่าคุณต้องรวมสำเนาใบอนุญาตระบบปฏิบัติการทั้งหมดที่คุณใช้ในโปรเจ็กต์ของคุณ การ "ยกเว้น" ในระดับประถมศึกษาแสดงว่าคุณละเมิดใบอนุญาต

การแยกพวกเขาออกจากโครงการอาจไม่ใช่ตัวเลือกที่ดีที่สุด ขอบคุณ RS สำหรับข้อมูล


2
@Andree เหตุผลที่เราแยกไฟล์ออกเพราะเราไม่ต้องการให้ไฟล์. txt (และอื่น ๆ ) รวมอยู่ใน. apk ที่จะสร้างขึ้นโดยบิลด์
biniam

4
ไม่รู้จักการยกเว้นนอก Android {}: /
An-droid

4
การยกเว้นควรอยู่ใน Android {} จากนั้นจะใช้งานได้เท่านั้น
Pavan Pyati

2
! โซลูชันนี้ละเมิดสิทธิ์การใช้งานโอเพนซอร์สทั้งหมด! เนื่องจากคุณจำเป็นต้องเพิ่มข้อความลิขสิทธิ์ดั้งเดิมของแต่ละไลบรารีลงในแพ็กเกจของคุณ
RS

2
สวัสดี ใด ใบอนุญาตระบบปฏิบัติการเกือบทั้งหมดมีข้อผูกมัดในการ "รวมสำเนาใบอนุญาต" ไว้ในโครงการของคุณ นั่นหมายความว่าคุณต้องรวมสำเนาใบอนุญาตระบบปฏิบัติการทั้งหมดที่คุณใช้ในโปรเจ็กต์ของคุณ การ "ยกเว้น" ในระดับประถมศึกษาแสดงว่าคุณละเมิดใบอนุญาต
RS

47

เรียน !! การละเมิดสิทธิ์การใช้งาน OpenSource ที่เป็นไปได้

ด้วยการยกเว้นไฟล์ license.txt ตามที่เสนอข้างต้นคุณอาจละเมิดสิทธิ์การใช้งานของโอเพนซอร์ซบางส่วนเนื่องจากเป็นประเด็นทั่วไปในใบอนุญาตโอเพนซอร์ซที่จะตกลงที่จะเพิ่มลงในแหล่งที่มาของคุณ ตรวจสอบใบอนุญาตโอเพนซอร์ซของคุณให้ดีขึ้น

อัปเดต: จนกว่าจะมีทางออกที่ดีกว่าให้ใช้

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

เช่นนี้อย่างน้อยคุณก็ปฏิบัติตามส่วนหนึ่งของภาระผูกพันด้านใบอนุญาต


23

เพียงแค่เพิ่ม

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

ใน build.gradle


เรากำลังละเมิดใบอนุญาตโอเพนซอร์ซเช่นนี้
RS

16

คุณสามารถแก้ไขได้โดยเพิ่มรหัสต่อไปนี้ใน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'
    }
}

สวัสดี ปัญหานี้ได้รับการแก้ไขเมื่อ 1.5 ปีที่แล้วขอบคุณสำหรับคำตอบ
a.black13

:-) เพิ่งเจอปัญหาวันนี้และเจอกระทู้นี้ และฉันไม่สังเกตเห็นวันที่
AlfredZhong

คุณไม่ได้สังเกตวันที่และไม่สนใจคำตอบอื่น ๆ ทั้งหมด
เหลือเชื่อ

11

ฉันประสบปัญหาเดียวกันกับรุ่นใหม่ของ gradle รูปแบบข้อความด้านล่างbuild.gradleใช้ได้กับฉัน:

มีขวดแจ็คสันสองขวดในโฟลเดอร์ libs ของฉัน

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

ขอบคุณ! วันนี้ฉันกระแทกหัวกับสิ่งนี้เป็นเวลา ~ 5 ชั่วโมง :) มันเป็นสิ่งpackagingOptions { exclude 'libs/jackson...' }ที่แก้ไขได้
CJBrew

8

เพิ่ม:

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

ได้ผลสำหรับฉันวิธีแก้ปัญหาของ biniam_Ethiopia น่าจะเป็นวิธีที่ปลอดภัยที่สุด


8

ในขณะที่ใส่รหัสนี้

android{

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

ตรวจสอบให้แน่ใจว่ากำลังแสดงข้อผิดพลาด

> คัดลอกไฟล์ที่ซ้ำกันใน APK META-INF / LICENSE.txt

จากนั้นเพิ่ม

 android{

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

}

ถ้าในข้อผิดพลาดก็มีการแสดง

> คัดลอกไฟล์ที่ซ้ำกันใน APK META-INF / LICENSE

จากนั้นเพิ่ม

 android{

packagingOptions{
    exclude 'META-INF/LICENSE'
 }

}

ถ้าในข้อผิดพลาดก็มีการแสดง

> คัดลอกไฟล์ที่ซ้ำกันใน APK META-INF / license.txt

จากนั้นเพิ่ม

 android{

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

}

ในข้อความสั้น ๆ กรณีและรูปแบบเอกสาร (.txt) มีความสำคัญมาก

(ข้อผิดพลาดนี้มีอยู่ใน Android Studio 1.1.0 ด้วย)


6

วิธีนี้จะช่วยคุณแก้ปัญหา

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

เหตุใดจึงมีการโหวตลงคะแนนจำนวนมากหากโดยพื้นฐานแล้วเหมือนกับคำตอบที่เหมาะสม
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'
}

เพิ่มในไฟล์ build.gradle และซิงค์โปรเจ็กต์


3

ฉันแค่เพิ่ม 2:

android{

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

}

สิ่งนี้จะรวมอยู่ในการผลิตแอปหรือไม่
RoCk RoCk

2

ฉันมีข้อผิดพลาดที่คล้ายกันและแก้ไขได้โดยไม่มีฟังก์ชันpackingOptions()and excludeฉันกำลังเพิ่มการอ้างอิงสองรายการ แต่กลุ่มหนึ่งเป็นกลุ่มย่อยของกลุ่มแรก สิ่งนี้ทำให้เกิดข้อผิดพลาดเมื่อฉันลบหนึ่งในนั้นฉันได้สร้างใหม่ทั้งหมด ขอแนะนำให้ตรวจสอบข้อผิดพลาดที่คล้ายกันภายในบล็อกการอ้างอิงของคุณ


สวัสดีฉันแก้ปัญหานี้เมื่อนานมาแล้วโดยการเพิ่ม packingOptions () ขอบคุณสำหรับคำตอบ) +1
a.black13

ปัญหานี้ได้รับการแก้ไขแล้วใน AS เวอร์ชันใหม่
a.black13

2

เมื่อใช้java-jwtและjackson-coreร่วมกันให้ใช้ดังต่อไปนี้:

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

นี่อาจเป็นแนวทางปฏิบัติที่ไม่ดีอย่างไรก็ตามหากคุณรวมห้องสมุดขนาดใหญ่หลายแห่งคุณอาจพบว่าตัวเองต้องเผชิญกับความขัดแย้งหลายร้อยประเภทเหล่านี้

รายการด้านล่างเป็นการแก้ไขที่ง่ายสุด ๆ สำหรับกรณีดังกล่าว:

android { 
    ....
    packagingOptions {
        // Allow the compilation process to choose the dependencies for us.
        pickFirst "**"
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.