簡體   English   中英

從@aar 中排除包/類,gradle 依賴

[英]Exclude package/classes from @aar, gradle dependency

我在build.gradle文件中添加了以下依賴build.gradle

compile 'com.aerisweather:aeris-maps-lib:2.0.0@aar'

它來自

https://oss.sonatype.org/content/repositories/comaerisweather-1027/com/aerisweather/aeris-maps-lib/2.0.0/

如果您從以下 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-v4mediarouter-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM