2017-08-09 4 views
1

私のプロジェクトは2つのライブラリAとBに依存しているとしましょう。これらのライブラリは同じバージョンのライブラリCに依存しています。ライブラリCはいくつかの共有ライブラリファイルに依存していますD.ライブラリC、両方ともjniLibsディレクトリにDを含みます。推移ネイティブライブラリを除外する方法は?

compile('group:A:[email protected]') 
compile('group:B:[email protected]') { 
    exclude group: 'group', module: 'C' 
} 

私はエラーが重複したDファイルがあることを知らせる受信:

さて、ここでの問題は、私が設定され、依存関係でこのプロジェクトをビルドしようとしたときにということです。私のライブラリの中の特定のjniLibsを無視するようにgradleに通知するにはどうすればいいですか? jniLibsの過渡的な依存関係の除外アナログはありますか?

+0

を「ライブラリCを使用するには、ライブラリAとBの両方が彼らの中にDが含まれますjniLibsディレクトリ " - 真剣に?これはAとBのバグです。それ自身のAARでネイティブライブラリは必要ありません。 AかBのどちらをコントロールしていますか? – CommonsWare

+0

@CommonsWare私はライブラリBを制御します。私はそれを削除することができますが、ライブラリBの他のコンシューマは共有ライブラリを提供することを余儀なくされるでしょうか? –

+1

CはAARでなければならず、CのAARは '.so'ファイルを含むべきです。それは事実ですか?もしそうなら、私はなぜAかBがAARに '.so'ファイルを必要とするのか分かりません。 CのAARに '.so'ファイルがない場合、それはCの問題です.CがAARでない場合、おそらく答えはC + DをAARにラップし、そのAARにAとBを依存させることです。 – CommonsWare

答えて

0

私はちょうどそれが見つかった共有ライブラリの最初のバージョンを使用するのGradleを強制することでGradleのを経由してこれを達成することができました:

android { 
    packagingOptions { 
     pickFirst 'lib/armeabi/D.so' 
     pickFirst 'lib/x86_64/D.so' 
     pickFirst 'lib/armeabi-v7a/D.so' 
     pickFirst 'lib/x86/D.so' 
     pickFirst 'lib/arm64-v8a/D.so' 
    } 
} 
関連する問題