2017-07-04 13 views
0

私のプロジェクトでは、サードパーティのjarファイルとFacebook SDKをインポートする必要があります。gradle Android Studioの1つのクラスファイルを除外

compile files('libs/SkinSDK.jar') 
compile 'com.facebook.android:facebook-android-sdk:4.14.0' 

どちらも同じBundleJSONConverterクラスを含みます。だから、私は署名付きのAPKを生成することはできません。 com/facebook/internal/BundleJSONConverterというエントリが重複して表示されます。

FacebookやSkinSDK.jarで除外したいと思います。試してみました

compile ('com.facebook.android:facebook-android-sdk:4.14.0') { 
    exclude group: 'com.facebook.internal', module: 'BundleJSONConverter' 
} 

これは動作しておらず、同じエラーが表示されています。

答えて

0

exclude依存関係の構成クロージャの方法は、推移的な依存関係を除外します。したがって、モジュールの依存関係が他のモジュールに依存する場合は、それらをビルドから除外できます。 Maven repository info page'com.facebook.android:facebook-android-sdk:4.14.0'モジュールの推移的な依存関係をチェックアウトすることができます。

推移従属のクラスにBundleJSONConverterクラスが存在する場合は、同じ方法で特定のモジュールを除外できます。依存関係の場合と同様に、groupmoduleversionと指定してください。

依存関係のjarのクラスを除外する場合は、jar jar linksツールとそのGradleプラグインを見てください。含まれているjarファイルを変更することができます。パッケージを変更したり、クラスを削除することができます。同様の状況にぶつかっ

compile jarjar.repackage { 
    from 'org.apache.hive:hive-exec:0.13.0.2.1.5.0-695' 

    archiveBypass "commons*.jar" 
    archiveExclude "slf4j*.jar" 

    classDelete "org.apache.thrift.**" 
    classRename 'org.json.**', '[email protected]' 
} 
1

以下(shortened) exampleは、プラグインと依存ジャーを変更するいくつかの方法の使用を示します。これは私が望んだとしてエレガントではない、私がやったことですが、それは動作します:

  1. は(あなたのケースでSkinSDK.jar)jarファイルの名前を変更します.zipの代わりに

  2. の.jarゴーの「内部"zipファイル(私はDoubleCommanderを使用していますが、他にも多くのユーティリティがあります)、または一時フォルダに展開します。

  3. 問題を引き起こす重複するクラスを削除します。 zipファイルの「外側」に移動します。

  4. ファイルを.zipから.jarに名前変更(または再パック)します。コンパイル。

は、この手順を短縮するため

+1

...それが動作ホープ:アーカイブの名前を変更するか、再梱包する必要はありません。どんな 'jar'ファイルも' zip'ファイルなので、さまざまなツール(例えば7-zip)で開くことができます。 –

+1

また、この 'jar'ファイルの変更を文書化してください!それ以外の場合は、外部ライブラリを更新する際に問題が発生します。 –

関連する問題