为什么我应该将gradle依赖项包含为`@ 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

如果不指定@后缀,则将以其默认格式(由作者定义,如果不是.jar,则以默认格式)以及所有依赖项下载该库。

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

指定@后缀时,将强制以指定的格式(可能存在或可能不存在)下载库。这很有用,例如当作者忘记指定该库为an
.aar并且maven(或gradle,不确定)将其.jar默认情况下对待时。当@后缀指定此库的依赖不再下载,所以你必须确保手动。

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

为了确保在@指定后缀时下载了库的完整依赖树,您必须按以下方式编写它:

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