[英]Exclude package/classes from @aar, gradle dependency
我在build.gradle
文件中添加了以下依賴build.gradle
。
compile 'com.aerisweather:aeris-maps-lib:2.0.0@aar'
它來自
如果您從以下 URL 看到工件,它具有 android 支持 v7 庫類。
https://oss.sonatype.org/#nexus-search;quick~aerisweather
我想在運行/打包應用程序時排除該包。 由於重復的類錯誤,我無法運行/打包應用程序。
我試過添加這樣的配置,
configurations {
all*.exclude group: 'com.android.support', module: 'appcompat-v7'
}
但這將它排除在整個項目之外,這導致我犯了很多錯誤。
我已經嘗試了所有方法,但仍然出現以下錯誤。
錯誤:任務“:transformClassesWithJarMergingForDebug”的執行失敗。 com.android.build.api.transform.TransformException:java.util.zip.ZipException:重復條目:android/support/v7/appcompat/R$anim.class
該庫還具有作為依賴項support-v4
和mediarouter-v7
。
您需要將它們全部從aeris-maps-lib
排除並包含為您自己的依賴項。
def supportLibraryVersion = '25.0.1'
dependencies {
compile "com.android.support:support-v4:${supportLibraryVersion}"
compile "com.android.support:support-annotations:${supportLibraryVersion}"
compile "com.android.support:appcompat-v7:${supportLibraryVersion}"
//... other deps
compile ('com.aerisweather:aeris-maps-lib:2.0.0@aar', {
exclude group: 'com.android.support', module: 'support-v4'
exclude group: 'com.android.support', module: 'appcompat-v7'
exclude group: 'com.android.support', module: 'mediarouter-v7'
})
}
附注。
aeris-maps-lib
也有com.google.android.gms:play-services
依賴項,它是整個 Play 服務包(很大),你需要啟用 MultiDex 或使用 proguard 壓縮代碼。
不是直接的答案,而是建議。
gradle 提供的排除功能(排除方法調用)不適用於本地 aar 文件中的內容,因為這些內容不是由依賴項管理定義的,因此不被相同的識別。 就依賴解析而言,aar 文件是一個單獨的單元(包括其中的所有資源/類)。 所以文件需要以不包含這些條目的方式構建; 或者,如果該文件不是由您構建的,您可以解壓縮並忽略有問題的文件並重新打包。
雖然可能有一些使用 gradle 刪除某些文件的黑客方法(我還沒有找到任何可靠的方法),但我們可以在其中加入一些中間構建步驟並刪除這些文件; 但通常建議的最佳做法是避免將公開可用的依賴項打包到 aar/jar 中,以避免重復輸入問題並保持 aar/jar 的大小更小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.