Android Studio 0.4 Các tệp trùng lặp được sao chép trong APK META-INF / LICENSE.txt


115

Sau khi tôi cập nhật Studio của mình từ 0.3.7 đến 0.4.0, tôi không thể biên dịch dự án của mình. Tôi đã tìm thấy một giải pháp trên stackoverflow: Sao chép các tệp được sao chép (Android Studio 0.4.0)

Tôi đã cập nhật dự án của mình lên 0,7. +, Nhưng tôi không biết mình phải đặt chuỗi tiếp theo ở đâu:

android {

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

Nhật ký của tôi: đăng nhập

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 Phát triển trên Ubuntu 13.04


2
androidPhần bên trong
Eugen Martynov

Cảm ơn. Tôi đặt block packOptions () trong tệp conf gradle chính. Đầu tiên tôi chèn khối này vào tập tin thư viện. Tất cả công việc hoàn hảo =)
a.black13

Câu trả lời:


155

Đặt các phụ thuộc ở đầu và góiOptions ở cuối làm việc cho tôi.

apply plugin: 'android'. 

Dưới đây là bản build.gradle đầy đủ của tôi tại thư mục ứng dụng.

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: Hầu hết tất cả các giấy phép HĐH đều có nghĩa vụ "bao gồm một bản sao của giấy phép" vào dự án của bạn. Vì vậy, điều này có nghĩa là, bạn phải bao gồm một bản sao của tất cả các giấy phép hệ điều hành bạn sử dụng cho các dự án của mình. Bằng cách "loại trừ" chúng trong lớp, bạn vi phạm giấy phép.

Loại trừ chúng khỏi dự án có thể không phải là lựa chọn tốt nhất. Cảm ơn bạn RS về thông tin.


2
@Andree Lý do chúng tôi loại trừ các tệp là vì chúng tôi không muốn các tệp .txt (và các tệp khác) được bao gồm trong .apk sẽ được tạo bởi bản dựng.
biniam

4
loại trừ không được công nhận bên ngoài Android {}: /
An-droid

4
Không bao gồm trong Android {}, sau đó chỉ có nó hoạt động.
Pavan Pyati

2
! Giải pháp này vi phạm tất cả các giấy phép nguồn mở! Vì bạn có nghĩa vụ phải thêm văn bản giấy phép gốc của mỗi thư viện vào gói của bạn
RS

2
Chào. Bất kì. Hầu như tất cả các giấy phép hệ điều hành bao gồm nghĩa vụ "bao gồm một bản sao của giấy phép" vào dự án của bạn. Vì vậy, điều này có nghĩa là, bạn phải bao gồm một bản sao của tất cả các giấy phép hệ điều hành bạn sử dụng cho các dự án của mình. Bằng cách "loại trừ" chúng trong lớp, bạn vi phạm giấy phép.
RS

47

Chú ý!! Có thể vi phạm giấy phép OpenSource.

Với việc loại trừ các tệp License.txt như được đề xuất ở trên, bạn có thể vi phạm một số giấy phép mã nguồn mở vì đây là điểm chung trong giấy phép mã nguồn mở để đồng ý thêm nó vào nguồn của bạn. Kiểm tra tốt hơn giấy phép mã nguồn mở của bạn.

Cập nhật: Cho đến khi có giải pháp tốt hơn, hãy sử dụng

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

như thế này bạn ít nhất hoàn thành một phần nghĩa vụ cấp phép


23

chỉ cần thêm

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

trong build.gradle


Chúng tôi đang vi phạm giấy phép mã nguồn mở như thế này
RS

16

Bạn có thể sửa nó bằng cách thêm đoạn mã sau vào 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'
    }
}

Chào. Vấn đề này đã được khắc phục 1,5 năm trước Cảm ơn câu trả lời
a.black13

:-) Tôi mới gặp vấn đề này ngày hôm nay và tìm thấy chủ đề này. Và tôi không thông báo ngày.
AlfredZhong

Bạn đã không thông báo ngày VÀ bỏ qua tất cả các câu trả lời khác.
Ngày

11

Tôi đã phải đối mặt với cùng một vấn đề như phiên bản mới của lớp, Dưới định dạng văn bản build.gradle hoạt động với tôi:

Có hai lọ jackson trong thư mục libs của tôi.

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

Cảm ơn bạn! Tôi đã đập đầu vào điều này trong khoảng 5 giờ hôm nay. :) Đó là cái packagingOptions { exclude 'libs/jackson...' }đã sửa nó.
CJBrew

8

Thêm:

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

làm việc cho tôi, giải pháp của biniam_Ethiopia có lẽ là không an toàn nhất


8

Trong khi chèn mã này

android{

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

ĐẢM BẢO nếu có lỗi nó đang hiển thị

> Sao chép các tệp được sao chép trong APK META-INF / LICENSE.txt

sau đó thêm

 android{

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

}

nếu có lỗi thì nó đang hiển thị

> Sao chép các tệp được sao chép trong APK META-INF / GIẤY PHÉP

sau đó thêm

 android{

packagingOptions{
    exclude 'META-INF/LICENSE'
 }

}

nếu có lỗi thì nó đang hiển thị

> Sao chép các tệp được sao chép trong APK META-INF / License.txt

sau đó thêm

 android{

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

}

Trong văn bản ngắn CASE và tài liệu FORMAT (.txt) rất quan trọng.

(lỗi này cũng tồn tại trong Android Studio 1.1.0)


6

Điều này sẽ giúp bạn giải quyết vấn đề

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

Tại sao điều này có rất nhiều downvote nếu về cơ bản giống như câu trả lời thích hợp?
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'
}

Thêm vào tệp build.gradle và dự án đồng bộ


3

Tôi chỉ cần thêm 2:

android{

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

}

Điều này sẽ được bao gồm vẫn còn, trong sản xuất ứng dụng?
RoCk RoCk

2

Tôi đã có một lỗi tương tự và giải quyết nó mà không có chức năng packingOptions()exclude. Tôi đã thêm hai phụ thuộc nhưng một là nhóm phụ của nhóm đầu tiên. Điều này gây ra lỗi, khi tôi xóa một trong số đó, tôi đã có bản dựng sạch. Tôi khuyên bạn nên kiểm tra một lỗi tương tự trong khối phụ thuộc của bạn.


Xin chào, tôi đã giải quyết vấn đề này từ lâu bằng cách thêm packOptions (). Cảm ơn câu trả lời) +1
a.black13

Sự cố này được khắc phục trong phiên bản mới có sẵn của AS
a.black13

2

Khi sử dụng java-jwtjackson-corecùng sử dụng như sau:

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

Điều này rất có thể là thực tiễn xấu, tuy nhiên nếu bạn bao gồm nhiều thư viện lớn, bạn có thể thấy mình đang làm việc thông qua hàng trăm loại xung đột này.

Dưới đây là một sửa chữa siêu đơn giản cho các trường hợp như vậy:

android { 
    ....
    packagingOptions {
        // Allow the compilation process to choose the dependencies for us.
        pickFirst "**"
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.