OSに依存しないパス「META-INF / LICENSE」で複数のファイルが見つかりました


333

アプリをビルドすると、次のエラーが発生します。

エラー:タスク ':app:transformResourcesWithMergeJavaResForDebug'の実行に失敗しました。OSに依存しないパス「META-INF / LICENSE」で複数のファイルが見つかりました

これは私のbuild.gradleファイルです:

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

このコードをbuild.gradleファイルに追加すると、

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

このエラーは解決されますが、別の問題が発生します。このような:

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)

これを解決する方法を知っているのは誰ですか?


AndroidのGoogle APIクライアントライブラリにアクセスするときにも同じ問題に直面しました。Gradleの依存関係からモジュールHttpClientを除外することで問題を解決しました。詳細については、Googleのドキュメントを参照developer.google.com/api-client-library/java/…「Android では、未使用の依存関係を明示的に除外する必要があります:」でドキュメントページを検索
mifthi

回答:


493

これをyourProject/app/build.gradle中に追加できますandroid{}

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
これが機能する理由と、「META-INF」の意味は何ですか?ありがとうございました!
Shreshth Kharbanda 2018

私たちはから論文のファイルを除外していない場合@CodeSlaveそれはAPKといくつかの問題が発生google.github.io/android-gradle-dsl/current/... パターンは、APKには含まれません除外する一致するパスを除外します。私が知っているすべて。私はこの問題について完全な考えを持っていません
Shaaban Ebrahim

11
これは質問に答えるかもしれませんが、この答えが問題の解決にどのように役立つかについていくつかの説明を追加することをお勧めします。詳細を知るには、どうすればよい答えを書くことができますかをお読みください。
Roshana Pitigala

3
私の場合、「META-INF / LICENSE.md」と「META-INF / LICENSE-notice.md」も追加する必要がありました
Klyner

1
exclude( "META-INF / *。kotlin_module")をpackaginOptionsリストに追加
Jaspal

129

私の場合、yourProject/app/build.gradle内側のパス「META-INF / DEPENDENCIES」のみを除外するだけで十分でしたandroid{} 。ここにあります

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}

そして、Clean ProjectとRebuild Projectを実行します。


11
「META-INF / DEPENDENCIES」を除外して、代わりに「META-INF / LICENSE」を除外してみてください
Pelanes

7
説明してください
Mohammad Ali

1
@SilSurは、このファイルを除外するので、私のコードと同じように、「META-INF / proguard / androidx-annotations.pro」のこのファイルと同じエラーが発生します。その後、除外ファイル「META-INF / proguard / androidx-annotations」を追加しました。プロとその仕事。
Gunavant Patel、

4
これは質問に答えるかもしれませんが、この答えが問題の解決にどのように役立つかについていくつかの説明を追加することをお勧めします。詳細を知るには、どうすればよい答えを書くことができますかをお読みください。
Roshana Pitigala


75

ここでの解決策は私を助けませんでしたが、このリンクは役に立ちました。

android .soファイルを追加するライブラリがある場合は、libassmidi.soまたはのように、パッケージングするときに1つだけを選択libgnustl_shared.soするようにgradleに指示する必要があります。そうしないと、競合が発生します。

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

React NativeアプリをAndroidプロジェクトのライブラリーとして使用すると、この問題が発生しました。それが役に立てば幸い


2
ありがとう、1つの.soファイルで同じ問題が発生しました。同じフォルダーにgdbserverと呼ばれる別のファイルがあり、ライブラリーのpackagesOptionsを追加した後、現在は機能しています。
フィッシュ氏

1
ありがとうございました!ネストされた依存関係としてJNA
aar

31

同様のメッセージがありました

エラー:タスク ':app:transformResourcesWithMergeJavaResForDebug'の実行に失敗しました。OSに依存しないパス 'constant-values.html'で複数のファイルが見つかりました

これを解決するには、Android Studioでパッケージview(1)を有効にしてから、ツリーを参照してライブラリを参照し、複製(2)を見つける必要がありました。

次に、ctrl + alt + f12(またはRMBメニュー)(3)-問題の原因となったライブラリを見つけました。問題の原因となったそれらのlib内のファイルのリストを作成し、それらをandroidセクション内のアプリのbuild.gradleファイルに書き込みました。他のオプションは、重複ファイルを含むライブラリを処理することです

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

ここに画像の説明を入力してください


1
どのようにして「ツリーからライブラリを参照し、重複を見つける」のですか。すべてのフォルダ内のすべてのファイルを本当に確認しましたか?
アンドロイド開発者

1
「重複を見つける」ことについても混乱しています。app / Librariesにはおそらく100のサブエントリがあります...重複を見つけるにはどうすればよいですか?
Freewalker

28

基本的に、gradleがapkファイルをまとめると、すべてのコンパイル依存関係からコンテンツがコピーされます。2つの異なるjarファイルから重複するfile..comingが存在することを確認するのは十分にインテリジェントです。これは、a.txtやMETA-INF / DEPENDENCIESなどの任意のファイルです。情報提供のみを目的としてファイルが存在する場合は、以下を使用してこれらのファイルを除外することをお勧めします。

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

あるいは、ファイルがクラスファイルのような必須ファイルであり、相互に関連する2つのjar依存関係にわたって複製されている場合、互換性のあるバージョンの方法で、これらのjarの代替を見つけるのが最善です。


これをプロジェクトに追加すると、もう一度解決できない別のエラーが発生します!他の解決策はありますか?
hetsgandhi

Hetvi Gandhi、あなたが見ているエラーは何ですか?
18

20

私は同じ問題を抱えていたのでこれを試しました

エラー:OSに依存しないパス「META-INF / proguard / androidx-annotations.pro」で複数のファイルが見つかりました

解決策: これを修正するには、これをアプリの「build.gradle」のandroid {}セクションに追加するだけです

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

18

これは

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

そして次のバージョンで修正されます

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


1
現時点で最新のorg.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.6の同様の問題。ダウングレードする必要があった
ファルハンパテル

ええ、同じ問題は1.3.6で
シェフチェンコ

17

同じエラーが発生しましたが、異なるパッケージの同じクラスが異なるモジュールに含まれていることが原因であることがわかりました。

たとえば、1つはandroidxパッケージを使用し、もう1つはpre-androidxパッケージを使用しました

Android Studioの組み込み機能を使用してpre-androidxモジュールをandroidxに移行することで解決しました。何も除外せずに「リファクタリング-> Androidxに移行...」


状況に応じて、モジュール間の依存関係の不一致があるかどうかを確認できます。


1
AndroidXに移行するとプロジェクトが破損する可能性があるため、プロジェクトの現在のバージョンのバックアップを作成することを忘れないでください。
Kathir 2018年

12

私はこのメッセージを受け取ることに関連するすべての回答を読みましたAndroid Studio

OSに依存しないパス「META-INF / LICENSE」で複数のファイルが見つかりました

ただし、この場合、クラスを除外する必要はありません。除外する必要があるだけです'META-INF/DEPENDENCIES'。これは/app/build.gradle

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

}

これと同じことが、SOに関する他の何百もの回答で伝えられています
Atul

11

StudioをJava 7からJava 8に更新したところ、この問題が発生しました。それから私はこのようにそれを解決しました:

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

8

私のアプリでは、次のようにjarの依存関係を追加していました。

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

しかし、依存関係の次の最初の行のために、それらがすでに追加されていることに気付きました。

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

この行は、libフォルダー内のすべてのjarをアプリの依存関係に追加します。

したがって、余分な依存関係を削除した後 implementation files('libs/json-simple-1.1.1.jar')

正常に動作しています。


これは役に立ちますが、回答とは関係ありません。ライブラリーには、名前と形式が類似しているメタフォルダーMETA-INFが含まれています。これらは重複するファイルの問題を引き起こすため、削除する必要があります。
Abhinav Saxena

7

複数のモジュールアプリ環境で同様の問題が発生しました。

エラー:タスク ':app:transformResourcesWithMergeJavaResForDebug'の実行に失敗しました。OSに依存しないパス「META-INF / AL2.0」で複数のファイルが見つかりました

この問題は私のこれらのモジュールのいくつかによって報告されており、上記の解決策のいずれもそれを修正していませんでした。結局のところ、私が使用していた別のライブラリによってすでに埋め込まれているMETA-INF / AL2.0を埋め込んでいるように見えるバージョンCoroutines 1.3.6を使用していました。これを修正するために、失敗したモジュールのbuild.gradleに次のコードスニペットを追加しました。

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

    }
}

複数のモジュールで発生していたresolutionStrategyため、そのコードをプロジェクトレベルのbuild.gradleに移動しました。その後はすべてうまくいきました。


4

私は同じ問題を抱えており、これを試しました

エラー: OSに依存しないパス「META-INF / library_release.kotlin_module」で複数のファイルが見つかりました

解決:

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

3

同様の問題がありました。エラーメッセージが表示されました-

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

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

上記の回答のいくつかで述べたように、以下のコードを使用すると機能します

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

しかし、20個の異なるファイルでこのエラーが発生したため、20個のファイルを除外した後、停止して適切な解決策を見つけようとしました。私も遭遇した

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

ようやくこれを解決しました。

最初に(私の場合、WillCloseWhenClosed.javaが重複ファイルでした)、Android Studioには「どこでも検索」のオプションがあります。そこでファイルを書き込んで検索します。そこで、このファイルの複数のインスタンスが見つかりました。だから私は両方のインスタンスをクリックし、ファイルを右クリックしてそれらの場所を確認し、Android Studioで開いたときにその場所を確認しました。

次に、gradleファイルにいくつかの依存関係があることがわかりました。以下のコードを使用していた

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

また、次の場所に同じzipパッケージがありました:\ Users \ user \ AndroidStudioProjects \ git \ appname \ app \ libs \ google-http-client-1.23!。

したがって、これは冗長であり、それがGradleが2つのファイルを見つける理由です。だから私は私のzipパッケージを削除し、それは私のためにエラーを解決しました。これを行うときは注意してください。削除する正しいファイルまたはパッケージがどれであるかを把握する必要があります。

3番目に、gradleはこれらのバグファイルのzipもこの場所に作成します(少なくとも私にとっては、C:\ Program Files \ Android \ Android Studio \ gradle \ m2repository \ com \ google \ code \ findbugs \ jsr305 \ 1.3)。 9 \ jsr305-1.3.9.jar!

そこで、jsr305-1.3.9.jarファイルもここから削除しました。

それでも混乱する場合は、Android Studioの「どこでも検索」に移動し、そこでファイルのインスタンスを見つけて、そのうちの1つを削除する必要があります。時間をかけて、どれを見つけます。



1

最初にいくつかのネイティブライブラリ(.soファイル)、次にjava / kotlinファイルでこの問題に直面しました。私は、ソースからのライブラリーを含み、推移的な依存関係を通じて成果物を参照していることがわかりました。依存関係ツリーをチェックして、重複するエントリがないかどうかを確認してください。./gradlew :app:dependencies依存関係ツリーを取得するために使用します。メインモジュール名が異なる場合は、「app」をモジュール名に置き換えます。



1

Android内のアプリレベルのGradelファイルに以下を追加します{}

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

デフォルトの構成からmultidexを削除して、ビルドエラーログを確認してください。そのログがINotificationクラスに関連している場合。これをAndroidで使用する{}

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

これは私を助けます。


0

私が解決策を働いた下では、あなたも助けを得るかもしれません、私はアプリのgradleファイルで以下の行を書きました

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

0

配線されましたが、プロジェクトはすでにAndroidXに移行されていますが、再度androidXに移行すると、プロジェクトの一部がリファクタリングされ、問題は解決しました。


0

以下のコードをapp.gradleに追加します。これにより、すべてのライブラリ依存エラーが解決されます

   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")
    exclude 'META-INF/library_release.kotlin_module'
    pickFirst 'lib/armeabi-v7a/libavdevice.so'
    pickFirst 'lib/armeabi/libavdevice.so'
    pickFirst 'lib/armeabi/libswresample.so'
    pickFirst 'lib/armeabi-v7a/libswresample.so'
    pickFirst 'lib/armeabi/libswscale.so'
    pickFirst 'lib/armeabi/libavcodec.so'
    pickFirst 'lib/armeabi-v7a/libavutil.so'
    pickFirst 'lib/armeabi/libavutil.so'
    pickFirst 'lib/armeabi-v7a/libavformat.so'
    pickFirst 'lib/armeabi/libavfilter.so'
    pickFirst 'lib/armeabi/libavformat.so'
    pickFirst 'lib/armeabi-v7a/libavcodec.so'
    pickFirst 'lib/armeabi-v7a/libswscale.so'
    pickFirst 'lib/armeabi/libpostproc.so'
    pickFirst 'lib/armeabi-v7a/libpostproc.so'
    pickFirst 'lib/armeabi-v7a/libavfilter.so'
}


-1

この問題に関するSOの多くの回答では、追加することexclude 'META-INF/DEPENDENCIES'、およびその他の除外することが提案されています。しかし、これらのどれも私にとってはうまくいきませんでした。私の場合、シナリオは次のようでした:

私はこれを依存関係に追加しました:

implementation 'androidx.annotation:annotation:1.1.0'

そして私はこれをgradle.propertiesに追加しました:

android.useAndroidX=true

ビルドエラー「シンボルクラスNullableが見つかりません」が発生したため、これらの両方を追加しました。これは、このようないくつかの回答でこれに対する解決策として提案されました

しかし、最終的に私はエラーに陥った:

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

exclude私のために働いていませんでした。最後に、上記の追加された行を疑いの外に削除しました(「別の方法で「シンボルクラスNullableが見つかりません」を解決しました)。最後に、この「OSで複数のファイルが見つかりました...」ビルドエラーを解消しました。私は私の時間を無駄にしました。しかし、ついにそれを取り除きました。


-1

キャッシュ無効にして再起動するだけで、プロジェクトクリーンアップできます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.