web-dev-qa-db-ja.com

「APK META-INF / *でコピーされた重複ファイル」の解決方法

私は商用Androidアプリケーションで働いています。また、さまざまなライセンスタイプでライセンスされているライブラリの一部を使用しています。その一部は次のとおりです。

ライブラリに帰属に関する注意事項が記載された「通知」ファイルがある場合、配布時にその通知を含める必要があります

(そのうちの1つはApache License 2.でライセンスされています)。

複数のライブラリがあります。 gradleまたはAndroid Studioでビルドを行うと、次のビルドエラーが発生します。

* What went wrong:
Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
> com.Android.build.api.transform.TransformException: com.Android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/license.txt

私がこれまでインターネットとstackoverflowで見つけた答えは、build.gradleファイルに次を追加することにより、パッケージからlicense.txt(notice.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'
}

例を参照してください: Android Studio 0.4 Duplicate files copy in APK META-INF/LICENSE.txt

それらのライブラリのライセンス(Apache License 2.など)に応じて、ライセンスファイルと通知ファイルはincludedである必要があります。

私の質問:ライセンスに関連する複数のファイルを追加するにはどうすればよいですか(license.txtnotice.txtなど)ライセンスに準拠するためにgradleから私のプロジェクトに(技術的詳細:ライセンステキストが連結されます)?

91
Flowryn

license.txtという名前を使用するライセンスが1つしかない場合は、解決策があります(すべてのlicense.txtコピーは同一です)。

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

それ以外の場合、Googleは依存関係ライセンスを管理するGradleプラグインもリリースしました。 here を参照してください。私はそれを試しませんでしたが、すべての依存関係を集約し、それらすべてのライセンスを表示するアクティビティを生成することさえできるようです。

47

以下をそれぞれのbuild.gradleファイルに追加します

packagingOptions {
        exclude 'META-INF/ASL2.0'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/MANIFEST.MF'
    }
32
Max Droid

アプリケーションで同じ問題に直面しました。ライブラリを2回追加していないことを確認する必要があります。 firebaseのドキュメントに従っている場合https://firebase.google.com/docs/Android/setup

その後、Android studio内にfirebaseライブラリを追加しないでください。つまり、file-> project structure-> cloud-> firebase

Androidアプリケーションでfirebaseを使用するには、両方のどちらかを実行するだけです。

最後に、アプリをクリーンにして再実行します。

4
aMighty

Build.gradleにこれらのオプションのみを含める必要があると思います。

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

Gradleで複数のライセンスを追加できます これを参照

0
Akhil Jayakumar