2017-08-09 21 views
1

假設我的項目依賴於兩個庫A和B.這些庫依賴於相同版本的庫C.庫C依賴於一對共享庫文件D.要使用庫C,庫A和B在他們的jniLibs目錄中都包含D。現在如何排除傳遞本機庫?

,這裏的問題是,當我試圖建立這個項目配置的依賴關係:

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

我收到一個錯誤,指出有重複d文件。我如何才能通知gradle忽略來自我的一個庫的某些jniLibs? 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中,並且A和B依賴於AAR。 – 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' 
    } 
}