一、Android Studio中Gradle是如何从仓库上获取一个library库文件的
在 build.gradle输入如下代码的时候,这些库是如何奇迹般下载到我们的项目中的呢。举个例子:
compile 'com.squareup.picasso:picasso:2.5.2'
1、library库文件的字符串结构
一般来说,需要知道library的字符串形式,包含3部分:GROUP_ID:ARTIFACT_ID:VERSION
上面的例子中,GROUP_ID是com.squareup.picasso ,ARTIFACT_ID是picasso,VERSION是2.5.2。
- GROUP_ID定义了library的group。有可能在同样的上下文中存在多个不同功能的library。如果library具有相同的group,那么它们将共享一个GROUP_ID。通常我们以开发者包名紧跟着library的group名称来命名,比如com.squareup.picasso。
- ARTIFACT_ID是library的真实名称。
- VERSION是版本包,可以是任意文字,建议设置为x.y.z的形式,如果喜欢还可以加上beta这样的后缀。
下面是Square library的一个例子。可以看到每个都可以很容易的分辨出library和开发者的名称。
dependencies {
compile 'com.squareup:otto:1.3.7'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.squareup.okhttp:okhttp:2.4.0'
compile 'com.squareup.retrofit:retrofit:1.9.0'
}
2、在添加了上面的依赖之后会发生什么呢?
Gradle会询问Maven仓库服务器这个library是否存在:如果存在,Gradle会获得请求library的路径,一般这个路径都是这样的形式:GROUP_ID/ARTIFACT_ID/VERSION_ID。比如可以在 http://jcenter.bintray.com/com/squareup/otto/1.3.7
和 https://oss.sonatype.org/content/repositories/releases/com/squareup/otto/1.3.7/
下获得com.squareup:otto:1.3.7的library文件。 这时Android Studio 将这些文件下载到我们的电脑上,与我们的项目一起编译。整个过程就是这么简单,一点都不复杂。
二、Android Studio中Gradle下载的library库文件在硬盘上的存放位置
现在应该清楚的知道从仓库上下载的library只是存储在仓库服务器上的jar 或者aar文件而已。就像自己去下载这些文件,拷贝到工程里和项目一起编译。但是使用Gradle依赖管理的最大好处是,除了添加几行文字之外啥也不做,library一下子就可以在项目中使用了。
1、那么这些library库文件被Gradle下载下来放到什么位置了呢
在Android Studio中的”External Libraries”下有引用的library的列表, 选择某个library右键->”Library Properties”就可以看到你引用的库本地的存放路径了, 如下图:
2、aar文件
仓库中存储的有两种类型的library库文件:jar和aar。jar文件很熟悉了,什么是aar文件呢?
aar文件是在jar文件之上开发的。之所以有它是因为有些Android Library需要植入一些安卓特有的文件,比如AndroidManifest.xml,资源文件,Assets或者JNI。这些都不是jar文件的标准。
总的来说它和jar一样只是普通的zip文件,不过具有不同的文件结构。jar文件以classes.jar的名字被嵌入到aar文件中。
aar文件包括资源文件和布局文件,但jar没有,所以aar文件是专门为安卓设计的。