Android のビルドで依存を追加した時に META-INF で duplicate して死ぬ話

Android で依存関係を SBT で自動的に解決していたら

Duplicate files copied in APK META-INF/

といっておこられた。

解決法

build.sbt に下記を追加する。

packagingOptions in Android := PackagingOptions(excludes = Seq(
  "META-INF/DEPENDENCIES.txt",
  "META-INF/LICENSE.txt",
  "META-INF/NOTICE.txt",
  "META-INF/NOTICE",
  "META-INF/LICENSE",
  "META-INF/DEPENDENCIES",
  "META-INF/notice.txt",
  "META-INF/license.txt",
  "META-INF/dependencies.txt",
  "META-INF/LGPL2.1",
))

よく知られている Android のビルドツールの問題で、ライブラリルートから同じパス同じ名前のファイルが存在すると Duplicate Error になるとのこと。

自分の場合は Json パーサの Jackson を追加した際に、META-INF/services/com.fasterxml.jackson.databind.Module が重複エラーになっていたので、

  "META-INF/services/com.fasterxml.jackson.databind.Module"

も追加した。

ただ、どうもこの META−INF/services 配下に置かれるのはプロバイダ構成ファイルというらしく、リフレクションの名前解決に用いられるらしいので、exclude しちゃってよいのかなぁという感じだけど、今のところ問題は出ていない。(リフレクションなので実行時エラーでしかわからないので、なにか問題が出るかもしれない)

おしまい。

広告

Android のビルドで依存を追加した時に META-INF で duplicate して死ぬ話」への2件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中