Android Studio 中的maven仓库使用

Android Studio是从哪里得到的库?

    先问一个简单的问题,我们平时在使用第三方库的时候,短短一行代码就可以引用这个库里的所有代码,是不是很神奇?难道是Android studio 从google搜索然后下载了一个合适的给我们?

    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.google.code.gson:gson:2.8.1'
    compile 'org.greenrobot:eventbus:3.0.0'
    compile 'com.orhanobut:logger:2.1.1'
    compile 'com.android.support:design:25.3.1'

上边这些库都是从哪里来的呢?好多人都是只知其一不知其二,其实是来自于这里

repositories {
        jcenter()
    }

    jcenter是一个由 bintray.com维护的Maven仓库 。Android Studio是从build.gradle里面定义的Maven 仓库服务器上下载library的。Apache Maven是Apache开发的一个工具,提供了用于贡献library的文件服务器。总的来说,只有两个标准的Android library文件服务器:jcenterMaven Central。同理,Maven Central 则是由sonatype.org维护的Maven仓库。
除了标准服务器外,我们还可以创建自己的服务器,然后把library放上去。相比于自己的服务器,上传到标准的服务器是个更为明智的选择

那两个标准库之间有何区别呢?

    其实,这两个标准库之间没什么区别,只不过有的library在jcenter有的在Maven Central,just so so。两个仓库都具有相同的使命:提供Java或者Android library服务。上传到哪个(或者都上传)取决于开发者。
    起初,Android Studio 选择Maven Central作为默认仓库。如果你使用老版本的Android Studio创建一个新项目,mavenCentral()会自动的定义在build.gradle中。
但是Maven Central的最大问题是对开发者不够友好。上传library异常困难。上传上去的开发者都是某种程度的极客。同时还因为诸如安全方面的其他原因,Android Studio团队决定把默认的仓库替换成jcenter。正如你看到的,一旦使用最新版本的Android Studio创建一个项目,jcenter()自动被定义,而不是mavenCentral()。

那么gradle是如何从仓库上获取一个library的?

我们就用下面这个讲一下

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

一般来说,我们需要知道library的字符串形式,包含3部分

GROUP_ID:ARTIFACT_ID:VERSION
    上面的例子中,GROUP_ID是com.android.support ,ARTIFACT_ID是appcompat-v7,VERSION是25.3.1。GROUP_ID定义了library的group。有可能在同样的上下文中存在多个不同功能的library。如果library具有相同的group,那么它们将共享一个GROUP_ID。通常我们以开发者包名紧跟着library的group名称来命名。然后ARTIFACT_ID中是library的真实名称。至于VERSION,就是版本号而已。
    那么在添加了上面的依赖之后会发生什么呢?简单。Gradle会询问Maven仓库服务器这个library是否存在,如果是,gradle会获得请求library的路径,一般这个路径都是这样的形式:GROUP_ID/ARTIFACT_ID/VERSION_ID。通过下载获得相应的library文件。然后Android Studio 将下载这些文件到我们的电脑上,与我们的项目一起编译。整个过程就是这么简单,一点都不复杂。

什么是arr文件

    仓库中存储的有两种类型的library:jar 和 aar。jar文件大家都知道,但是什么是aar文件呢?
aar文件时在jar文件之上开发的。之所以有它是因为有些Android Library需要植入一些安卓特有的文件,比如AndroidManifest.xml,资源文件,Assets或者JNI。这些都不是jar文件的标准。因此aar文件就时发明出来包含所有这些东西的。总的来说它和jar一样只是普通的zip文件,不过具有不同的文件结构。jar文件以classes.jar的名字被嵌入到aar文件中。其余的文件罗列如下:

  • /AndroidManifest.xml (mandatory)
  • /classes.jar (mandatory)
  • /res/ (mandatory)
  • /R.txt (mandatory)
  • /assets/ (optional)
  • /libs/*.jar (optional)
  • /jni//*.so (optional)
  • /proguard.txt (optional)
  • /lint.jar (optional)
    可以看到.aar文件是专门为安卓设计的。

你可能感兴趣的:(Android小工到专家)