Đã tìm thấy nhiều tệp với đường dẫn độc lập của hệ điều hành 'META-INF / LICENSE'


331

Khi tôi xây dựng ứng dụng của mình, tôi gặp lỗi sau:

Lỗi: Thực thi không thành công cho nhiệm vụ ': app: TransformResourceWithMergeJavaResForDebug'. Đã tìm thấy nhiều tệp với đường dẫn độc lập của hệ điều hành 'META-INF / LICENSE'

Đây là tập tin build.gradle của tôi:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "cn.sz.cyrus.kotlintest"
        minSdkVersion 14
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        javaCompileOptions{
            annotationProcessorOptions{
                includeCompileClasspath = true
            }
        }
        multiDexEnabled true
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    packagingOptions {
 /*       exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'*/
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:design:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1'
    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
    testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
    compile 'com.github.GrenderG:Toasty:1.2.5'
    compile 'com.orhanobut:logger:1.15'

    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'com.umeng.analytics:analytics:latest.integration'
    compile 'ai.api:libai:1.4.8'
    compile 'ai.api:sdk:2.0.5@aar'
// api.ai SDK dependencies
    compile 'com.google.code.gson:gson:2.8.0'
    compile 'commons-io:commons-io:2.4'
    compile 'com.android.support:multidex:1.0.1'
}

Khi tôi thêm mã này vào tệp build.gradle của mình,

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

Lỗi này sẽ được giải quyết, nhưng một vấn đề khác sẽ xảy ra. Như thế này:

java.lang.NoClassDefFoundError: com.squareup.leakcanary.internal.HeapAnalyzerService
at com.squareup.leakcanary.LeakCanary.isInAnalyzerProcess(LeakCanary.java:145)
at cn.sz.cyrus.wemz.TestApplication.onCreate(TestApplication.kt:32)

Ai có ý tưởng làm thế nào để giải quyết điều này?


Tôi gặp vấn đề tương tự khi truy cập Thư viện khách Google API cho Android. Đã giải quyết vấn đề bằng cách loại trừ mô-đun httpClient khỏi các phụ thuộc lớp. Tham khảo tài liệu Google để biết thêm chi tiết developers.google.com/api-client-l
Library / java

Câu trả lời:


490

Bạn có thể thêm cái này vào yourProject/app/build.gradlebên trongandroid{}

android {      
      packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
        exclude("META-INF/*.kotlin_module") 
      }          
}

23
Bạn có thể giải thích tại sao điều này hoạt động và ý nghĩa của "META-INF" là gì không? Cảm ơn bạn!
Shreshth Kharbanda

@CodeSlave nó gây ra một số vấn đề với apk nếu chúng tôi không loại trừ các tệp này khỏi google.github.io/android-gradle-dsl/cản/iêu Loại trừ các đường dẫn khớp với mẫu loại trừ sẽ không được đưa vào APK. đó là tất cả những gì tôi biết Tôi chưa hoàn thành ý tưởng về vấn đề này
Shaaban Ebrahim

11
Trong khi điều này có thể trả lời câu hỏi, tốt hơn là thêm một số mô tả về cách câu trả lời này có thể giúp giải quyết vấn đề. Xin vui lòng đọc Làm thế nào để tôi viết một câu trả lời tốt để biết thêm.
Roshana Pitigala

3
Trong trường hợp của tôi, tôi cũng cần thêm 'META-INF / LICENSE.md' và 'META-INF / LICENSE-notice.md'
Klyner

1
Thêm loại trừ ("META-INF / *. Kotlin_module") trong danh sách packaginOptions
Jaspal

129

Trong trường hợp của tôi, chỉ cần loại trừ đường dẫn 'META-INF / DEPENDENCIES' ở yourProject/app/build.gradlebên trong android{} . Nó đây rồi

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}

Và sau đó làm Dự án sạch và Dự án xây dựng lại.


11
Hãy thử loại trừ 'META-INF / DEPENDENCIES' thay vào đó loại trừ 'META-INF / GIẤY PHÉP'
Pelanes

7
Xin giải thích
Mohammad Ali

1
@SilSur loại trừ tệp đó khiến bạn gặp lỗi như trong mã của tôi cùng một lỗi với "META-INF / proguard / androidx-annotations.pro" tệp này, và sau đó tôi đã thêm loại trừ 'META-INF / proguard / androidx-annotations. pro 'và công việc của nó.
Gunavant Patel

4
Trong khi điều này có thể trả lời câu hỏi, tốt hơn là thêm một số mô tả về cách câu trả lời này có thể giúp giải quyết vấn đề. Xin vui lòng đọc Làm thế nào để tôi viết một câu trả lời tốt để biết thêm.
Roshana Pitigala

Bạn không cần dọn dẹp chỉ cần đồng bộ hóa các tập tin lớp
steve moretz

75

Các giải pháp ở đây không giúp tôi, nhưng liên kết này đã làm.

Nếu bạn có một thư viện bổ sung một số tập tin android .so Giốnglibassmidi.so hoặc libgnustl_shared.so- bạn phải nói với lớp chỉ chọn một khi đóng gói, nếu không bạn sẽ gặp xung đột.

android {
  packagingOptions {
    pickFirst 'lib/armeabi-v7a/libassmidi.so'
    pickFirst 'lib/x86/libassmidi.so'
  }
}

Tôi gặp vấn đề này khi sử dụng ứng dụng React Native làm thư viện trong dự án Android. Hy vọng nó giúp


2
Cảm ơn bạn, tôi đã có cùng một vấn đề với chỉ một tập tin .so. Có một tệp khác gọi là gdbserver trong cùng thư mục và sau khi thêm bao bì cho các thư viện, nó hoạt động ngay bây giờ.
Ông Cá

1
Cảm ơn bạn! Được giúp đỡ khi tôi có một JNA aar là phụ thuộc lồng nhau
faisal00813

31

Có tin nhắn tương tự

Lỗi: Thực thi không thành công cho nhiệm vụ ': app: TransformResourceWithMergeJavaResForDebug'. Đã tìm thấy nhiều tệp với đường dẫn độc lập của hệ điều hành 'hằng-giá trị.html'

Để giải quyết nó, tôi phải kích hoạt chế độ xem gói ( 1 ) trong Android Studio, sau đó duyệt qua cây đến thư viện và xác định vị trí trùng lặp ( 2 )

Sau đó, ctrl + alt + f12 (hoặc menu RMB) ( 3 ) - và tìm thấy các thư viện gây ra sự cố. Lập danh sách các tệp bên trong các lib đó gây ra sự cố và viết chúng vào tệp build.gradle của ứng dụng trong phần android . Tùy chọn khác là đối phó với thư viện, chứa các tệp trùng lặp

packagingOptions {
    exclude 'allclasses-frame.html'
    exclude 'allclasses-noframe.html'
    <..>

nhập mô tả hình ảnh ở đây


1
Làm thế nào để bạn "sau đó duyệt qua cây đến thư viện và xác định vị trí trùng lặp"? Bạn đã thực sự đi qua tất cả các tập tin trong tất cả các thư mục?
nhà phát triển Android

1
Tôi cũng bối rối về "xác định vị trí trùng lặp." Có thể có 100 mục con trong ứng dụng / Thư viện ... làm thế nào để xác định vị trí trùng lặp?
Freewalker

28

Về cơ bản khi gradle tập hợp các tệp apk, nó sao chép nội dung từ tất cả các phụ thuộc biên dịch, Nó đủ thông minh để thấy rằng có một tệp trùng lặp..com từ hai tệp jar khác nhau. Đây có thể là bất kỳ tệp nào như a.txt hoặc META-INF / DEPENDENCIES. Có thể tốt nhất là loại trừ các tệp này bằng cách sử dụng bên dưới, trong trường hợp tệp chỉ hiện diện ở đó cho mục đích thông tin.

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

Hoặc trong trường hợp, tệp là một tệp bắt buộc như tệp lớp, đã được sao chép qua hai phụ thuộc jar có liên quan với nhau, tốt nhất là tìm các lựa chọn thay thế cho các lọ này, theo cách của phiên bản tương thích hơn.


Khi tôi thêm nó vào dự án của mình, tôi gặp một lỗi khác mà tôi không thể giải quyết! Giải pháp nào khác?
hetsgandhi

Hetvi Gandhi, lỗi mà bạn đang thấy là gì?
ank

20

Tôi đã có cùng một vấn đề và tôi đã thử điều này

Lỗi: Đã tìm thấy nhiều tệp với đường dẫn độc lập của hệ điều hành 'META-INF / proguard / androidx-annotations.pro'

Giải pháp: Tất cả những gì bạn phải làm để khắc phục điều này là thêm phần này vào phần {{android trong ứng dụng 'build.gradle' của ứng dụng của bạn

packagingOptions {
    exclude 'META-INF/proguard/androidx-annotations.pro'
}

18

Điều này xảy ra khi sử dụng

org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.2.0

Và được sửa trong phiên bản tiếp theo

org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.2.1


1
vấn đề tương tự với org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.3.6, đây là lần gần đây nhất. đã phải hạ cấp
farhan patel

Vâng, cùng một vấn đề vào ngày 1.3.6
Shefchenko

17

Tôi đã gặp cùng một lỗi và tôi thấy rằng nó xuất phát từ các mô-đun khác nhau chứa các lớp giống nhau từ các gói khác nhau .

ví dụ: Một gói androidx đã sử dụng và gói khác được sử dụng trước androidx

Tôi đã giải quyết nó bằng cách di chuyển mô-đun tiền androidx sang androidx bằng tính năng tích hợp sẵn của Android Studio: "Refactor -> Di chuyển sang Androidx ..." mà không loại trừ bất cứ điều gì.


Đối với tình huống của bạn, bạn có thể kiểm tra xem bạn có bất kỳ sự không phù hợp phụ thuộc nào giữa các mô-đun không.


1
Đừng quên tạo bản sao lưu của phiên bản hiện tại của dự án của bạn vì việc chuyển sang AndroidX có thể phá vỡ dự án của bạn!
Kathir

12

Tôi đã đọc tất cả các câu trả lời liên quan đến việc nhận được tin nhắn này trong Android Studio:

Đã tìm thấy nhiều tệp với đường dẫn độc lập của hệ điều hành 'META-INF / LICENSE'

nhưng trong trường hợp này, loại trừ các lớp là không cần thiết, chúng ta chỉ cần loại trừ 'META-INF/DEPENDENCIES', điều này có thể được thực hiện bên trong /app/build.gradle:

android{
    ...
    ...
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
    }

}

Điều này cũng đã được nói trong hàng trăm câu trả lời khác trên SO
Atul

11

Tôi đã cập nhật Studio từ Java 7 lên Java 8 và sự cố này đã xảy ra. Sau đó, tôi đã giải quyết nó theo cách này:

android {
    defaultConfig {
    }
    buildTypes {
    }
    packagingOptions{
        exclude 'META-INF/rxjava.properties'
    }
}

8

Tôi ứng dụng của tôi, tôi đã thêm các phụ thuộc jar như thế này:

implementation files('libs/json-simple-1.1.1.jar')

Nhưng tôi nhận ra rằng chúng đã được thêm vào vì dòng đầu tiên sau đây trong phần phụ thuộc:

implementation fileTree(include: ['*.jar'], dir: 'libs')

Dòng này thêm tất cả các lọ trong thư mục lib vào phụ thuộc ứng dụng.

Do đó sau khi loại bỏ phụ thuộc thêm implementation files('libs/json-simple-1.1.1.jar')

nó đang hoạt động tốt


Điều này rất hữu ích nhưng không liên quan đến câu trả lời. Trong các thư viện, bạn tìm thấy các thư mục meta META-INF có thể giống nhau về tên và định dạng. Những nguyên nhân gây ra vấn đề trùng lặp tập tin do đó phải được loại bỏ.
Abhinav Saxena

7

Tôi đã phải đối mặt với một vấn đề tương tự làm việc trong môi trường ứng dụng nhiều mô-đun:

Lỗi: Thực thi không thành công cho nhiệm vụ ': app: TransformResourceWithMergeJavaResForDebug'. Đã tìm thấy nhiều tệp với đường dẫn độc lập của hệ điều hành 'META-INF / AL2.0'

Vấn đề này đã được báo cáo bởi một vài trong số các mô-đun này của tôi và không có giải pháp nào ở trên đang khắc phục nó. Hóa ra, tôi đang sử dụng phiên bản Coroutines 1.3.6 dường như đang nhúng META-INF / AL2.0 đã được nhúng bởi một thư viện khác mà tôi đang sử dụng. Để sửa lỗi, tôi đã thêm đoạn mã sau vào build.gradle của mô-đun bị lỗi:

configurations.all {
    resolutionStrategy {
        exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-debug"

    }
}

Cho rằng điều đó đã xảy ra trên nhiều mô-đun, tôi đã chuyển resolutionStrategymã đó sang build.gradle cấp dự án của mình. Mọi thứ đã hoạt động sau đó.


4

Tôi có cùng một vấn đề và tôi đã thử điều này

Lỗi: Đã tìm thấy nhiều tệp với đường dẫn độc lập của hệ điều hành 'META-INF / library_release.kotlin_module'

Giải pháp:

android {
    packagingOptions {
    exclude 'META-INF/library_release.kotlin_module'
    }
}

3

Tôi đã có một vấn đề tương tự. tôi đã nhận được thông báo lỗi -

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.

More than one file was found with OS independent path 'javax/annotation/WillCloseWhenClosed.java'

Như đã nêu trong một số câu trả lời ở trên, sử dụng đoạn mã dưới đây hoạt động

'packagingOptions {
       exclude 'allclasses-frame.html'
    }'

Nhưng tôi đã nhận được lỗi này cho 20 tệp khác nhau, vì vậy sau khi loại trừ 20 tệp, tôi đã dừng lại và cố gắng tìm một giải pháp hợp lý. Tôi cũng đã gặp

'Unable to execute dex: Multiple dex files' error.

Cuối cùng tôi đã giải quyết được điều này.

Thứ nhất (như trong trường hợp của tôi WillCloseWhenCloses.java là tệp trùng lặp), trong studio android bạn có tùy chọn 'tìm kiếm ở mọi nơi'. Viết và tìm kiếm các tập tin ở đó. Ở đó tôi tìm thấy nhiều phiên bản của tập tin này. Vì vậy, tôi đã nhấp vào cả hai trường hợp và thấy vị trí của họ bằng cách nhấp chuột phải vào tệp và xem vị trí của nó khi họ mở trong studio android.

Thứ hai, tôi nhận ra rằng tôi có một số phụ thuộc trong tập tin lớp. Tôi đã sử dụng mã dưới đây

dependencies {
    compile 'com.google.api-client:google-api-client:1.23.0'
}

và tôi cũng có các gói zip giống nhau ở vị trí: \ Users \ user \ AndroidStudioProjects \ git \ appname \ app \ libs \ google-http-client-1.23!.

Vì vậy, điều này là dư thừa và đó là lý do tại sao gradle tìm thấy 2 tệp. Vì vậy, tôi đã xóa các gói zip của tôi và nó đã giải quyết các lỗi cho tôi. Hãy cẩn thận trong khi làm điều này. Bạn phải tìm ra tập tin hoặc gói chính xác sẽ bị xóa.

Thứ ba, gradle cũng tạo một zip của các tệp lỗi này ở vị trí này (Ít nhất là đối với tôi nó đã tạo ra) - C: \ Program Files \ Android \ Android Studio \ gradle \ m2reposeective \ com \ google \ code \ findbugs \ jsr305 \ 1.3. 9 \ jsr305-1.3.9.jar!

vì vậy tôi đã đi và xóa tệp jsr305-1.3.9.jar từ đây.

Nếu bạn vẫn còn bối rối, chỉ cần đi 'tìm kiếm ở mọi nơi' trong studio android, tìm các phiên bản của tệp của bạn ở đó và bạn sẽ phải xóa một trong số chúng. Dành thời gian của bạn và tìm ra cái nào.


3

Thêm

android.useAndroidX = đúng

android.enableJetifier = đúng

để gradle.properies làm việc cho tôi.


1

Tôi đã đối mặt với vấn đề này, đầu tiên với một số thư viện riêng (tệp .so) và sau đó với các tệp java / kotlin. Hóa ra tôi đã bao gồm một thư viện từ nguồn cũng như tham chiếu tạo tác thông qua một phụ thuộc bắc cầu. Kiểm tra cây phụ thuộc của bạn để xem nếu có bất kỳ mục dư thừa. Sử dụng ./gradlew :app:dependenciesđể có được cây phụ thuộc. Thay thế "ứng dụng" bằng tên mô-đun của bạn nếu tên mô-đun chính khác.


1

Thêm phần sau trong tệp gradel cấp ứng dụng trong android {}

packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
        exclude("META-INF/*.kotlin_module") 
      } 

0

Cố gắng loại bỏ multidex khỏi cấu hình mặc định và kiểm tra nhật ký lỗi xây dựng. Nếu nhật ký đó là một số có liên quan với lớp INotification. Sử dụng cái này trong android {}

configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4'
}

Điều này giúp tôi.


0

Đối với tôi bên dưới giải pháp hoạt động bạn cũng có thể nhận được sự giúp đỡ, tôi đã viết dòng dưới đây trong tập tin lớp của ứng dụng

  packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }

0

Tôi đã có dây, nhưng dự án của tôi đã được chuyển sang AndroidX, nhưng sau khi chuyển sang AndroidX một lần nữa, nó đã cấu trúc lại một phần dự án của tôi và vấn đề đã được giải quyết.


0

Hãy thử thay đổi phiên bản Android tối thiểu> = 21 trong bản build.gradle android {} của bạn


-1

đối với tôi, đó là .md chứ không phải .txt

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

-1

Trong nhiều câu trả lời về SO về vấn đề này, nó đã được đề xuất để thêm exclude 'META-INF/DEPENDENCIES'và một số loại trừ khác. Tuy nhiên không ai trong số này làm việc cho tôi. Trong trường hợp của tôi kịch bản là như thế này:

Tôi đã thêm điều này trong các phụ thuộc:

implementation 'androidx.annotation:annotation:1.1.0'

Và tôi cũng đã thêm điều này trong gradle.properies:

android.useAndroidX=true

Cả hai điều này tôi đã thêm, vì tôi đang gặp lỗi xây dựng 'không thể tìm thấy lớp biểu tượng Nullable' và nó được đề xuất là giải pháp cho vấn đề này trên một số câu trả lời như ở đây

Tuy nhiên, cuối cùng tôi đã gặp phải lỗi:

 More than one file was found with OS independent path 'androidsupportmultidexversion.txt'

Không excludelàm việc cho tôi. Cuối cùng tôi chỉ xóa những dòng được thêm ở trên chỉ vì nghi ngờ (Đã giải quyết 'không thể tìm thấy lớp biểu tượng Nullable' theo cách khác) và cuối cùng tôi đã thoát khỏi lỗi xây dựng "Nhiều hơn một tệp với hệ điều hành ...". Tôi đã lãng phí hàng giờ của tôi. Nhưng cuối cùng đã thoát khỏi nó.


-1

Bạn chỉ cần Vô hiệu hóa Cache & Khởi động lại , sau Dự án sạch đó

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.