2012-01-10 16 views
10

Androidプロジェクトにサードパーティライブラリ(JmDNS)を追加しようとしています。Android Proguard重複定義

基本プロジェクトディレクトリの下に 'libs'というフォルダを作成し、jarファイルをそのディレクトリにドロップしました。

Ant(ant release)を使用してプロジェクトをビルドしようとすると、JmDNS jarファイルの各クラスであると思われるものについて「重複した定義」という通知が表示されます。

.... 
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.Canceler] 
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.DNSStateTask] 
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.Prober] 
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.Renewer] 
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.package-info] 
[proguard] Note: duplicate definition of library class [javax.jmdns.package-info] 
[proguard] Note: there were 357 duplicate class definitions. 

ビルドには、次のエラーで失敗します。

BUILD FAILED 
/path/Tools/ant-android-scala/build-scala.xml:183: Can't write [/path/bin/projectname-debug-shrinked.jar] (Can't read [/path/projectname/libs/jmdns.jar(;;;;!META-INF/MANIFEST.MF,!library.properties)] (Duplicate zip entry [jmdns.jar:javax/jmdns/JmDNS$Delegate.class])) 

私はjarファイルを一度にのみ含まれていることを確認作った、と私は重複したソースファイルを含めています他に方法はありませんプロジェクトのどこにでも置くことができます。

なぜ、Proguardは重複定義について文句を言いますか?

+0

私のために解決してくれたプロジェクトのきれいなもの(提案された回答をたくさん試した後)は、libの古いバージョンがビルドフォルダなどに保存されていたようです。 – Fonix

答えて

12

サードパーティのライブラリを別のディレクトリ(私の場合はlib)に移動することでこれを修正しました。次に、proguard.cfgファイルに

-injars lib/jmdns.jar 

を追加しました。

サードパーティのlbsが 'libs'フォルダに含まれている場合、それらは2回処理されます。

+0

私は同じエラーに遭遇して解決しましたあなたの答えによると、 - 私は、瓶のための完全なパスを使用しています - インチ... あなたの答えを共有ありがとうございます。 –

+5

または '-injars libs' – shkschneider

+0

'lib'と 'libs'の2つのフォルダがありますか?あなたのgradleで 'fileTreeをコンパイルしてください(dir: 'libs'、include:['* .jar'])'? – NickUnuchek

1

現在のプロガードバージョンでは、傷害を指定する必要はありません。これはデフォルトで処理されます。これは、以下の理由による可能性があります。

1)参照先のライブラリの一部に重複するjarファイルがあります。

ソリューション - アプリケーションからそれを削除し、それが原因アプリケーションのGradleファイルと参照ライブラリのGradleファイル間で異なるGradleのバージョンに参照ライブラリ

2)だろうになりましょう。同じようにしてください。

解決方法 - gradleファイルを参照先のライブラリ/プロジェクトのgradleファイルのいずれかに編集します。両方のプロジェクトでクラスパスが同じであることを確認してください。

dependencies { classpath 'com.android.tools.build:gradle:1.3.0' }

私は、これらの両方の問題を抱えていた、それを整流し、それが働きました。

関連する問題