簡體   English   中英

為什么我要將gradle依賴包含為`@ aar`

[英]Why should I include a gradle dependency as `@aar`

為什么(或不應該)我將gradle依賴包含為@aar

有什么好處/缺點?

正如您所看到的,我將@aar添加到支持它的下面的庫中。 但是在做這件事之前,一切似乎都有效......

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'com.google.android.gms:play-services-maps:7.3.+'
    compile 'com.google.guava:guava:18.0'
    compile 'com.octo.android.robospice:robospice-spring-android:1.4.14'
    compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
    compile 'com.mcxiaoke.volley:library-aar:1.0.0@aar'
    compile 'de.psdev.licensesdialog:licensesdialog:1.7.0@aar'
}

可以使用多種格式上載庫,大多數情況下您將使用.jar.aar

如果不指定@ suffix,則將以其默認格式(由作者定義,如果不是.jar )及其所有依賴項下載庫。

compile 'com.android.support:appcompat-v7:22.1.1'

當您指定@ suffix時,您將強制以您指定的格式(可能存在也可能不存在)下載庫。 這很有用,例如當作者忘記指定庫是.aar和maven(或gradle,不確定)默認情況下將其視為.jar 如果指定了@ suffix,則不再下載此庫的依賴項,因此您必須手動確保。

compile 'com.android.support:appcompat-v7:22.1.1@aar'
compile 'com.android.support:support-v4:22.1.1@jar'

要確保在指定@ suffix時下載庫的完整依賴關系樹,您必須按以下方式編寫它:

compile ('com.android.support:appcompat-v7:22.1.1@aar') {
    transitive = true
}

TL; DR:忽略@后綴,如果不是所有的話,你大部分時間都會很好。

以此作為序幕,這是我對正在發生的事情的理解......

對於與該情況相關的組ID /工件ID可能存在多個工件的情況, @語法表示您需要此類工件。

例如,Android庫項目自然會編譯為AAR,因此這將是將要分發的典型工件。 但是,如果庫項目實際上沒有使用資源,那么它也可以編譯為JAR,因此可以在AAR不能的情況下使用。 庫作者可以將AAR和JAR作為單獨的工件類型分發給相同的組ID /工件ID,因此工具可以抓取任何合適的工件ID。 提供@后綴的工具將選擇一個,但如果您提供后綴,則該工具應遵守您的請求。

在Android Studio的情況下,我的理解是,如果您沒有另外指定,它將首先查找AAR工件,然后查找JAR。 我的理解是Maven for Android會反過來尋找JAR,然后是AAR。

因此,如果存在默認工件分辨率不符合您自己喜歡的庫,則可以添加@后綴並將分辨率強制為您想要的分辨率。 但是,通常情況下,即使沒有它,該工具也會做正確的事情。

如果你要求一些不存在的東西,那么@后綴會成為問題的地方。 例如, compile 'com.android.support:appcompat-v7:22.1.1@jar'不起作用,因為該工件僅作為AAR提供 - 這在嘗試下載依賴項時會失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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