1. ホーム
  2. java

[解決済み] APK META-INF/*に重複したファイルがコピーされました" を解決するには?

2023-03-24 05:51:21

質問

私は商用アンドロイドアプリケーションに取り組んでいます。 私はまた、異なるライセンスタイプの下でライセンスされたいくつかのライブラリを使用していますそれらのいくつかは、次のように述べています。

ライブラリが帰属に関する注記を含む "NOTICE" ファイルを持っている場合、配布するときにその注記を含める必要があります。

(そのうち1つは、ライセンスが Apacheライセンス2.0 など)。

ライブラリは1つだけではありません。でビルドを行うと gradle とか アンドロイドスタジオ 以下のようなビルドエラーが発生します。

* 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

今までネットやスタックオーバーフローで見つけた回答では、パッケージからlicense.txt(notice.txtなどこのような邪魔になるファイル)を削除するために build.gradle ファイルに以下のように記述してください。

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 APKのMETA-INF/LICENSE.txtにコピーされたファイルが重複しています。

これらのライブラリのライセンスによると( Apacheライセンス2.0 など) に従って、ライセンスと通知ファイルは を含む .

私の質問です。 ライセンスに関連する複数のファイル(例えば license.txt , notice.txt など)をgradleから自分のプロジェクトに取り込んで、ライセンス( 技術的な詳細です。 ライセンステキストは連結されます)?

どのように解決するのですか?

ライセンスが1つしかない場合、以下のような解決策があります。 license.txt (読み方: すべての license.txt のコピーは同一です)。

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

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