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 Studio 中的maven仓库使用相关推荐

  1. 拥抱 Android Studio 之四:Maven 仓库使用与私有仓库搭建

    使用.创造和分享 笔者曾经不思量力的思考过『是什么推动了互联网技术的快速发展?』这种伟大的命题.结论是,除了摩尔定律之外,技术经验的快速积累和广泛分享,也是重要的原因. 有人戏称,『写 Java,首先 ...

  2. Android studio 中引用jar的其实是Maven?(一)

    由于Studio比eclipse多了一步对工程构建的步骤,即为build.gradle这个文件运行,因此其引入第三方开发jar包与lib工程对比Eclipse已完成不同,引入第三方jar与lib工程显 ...

  3. linux gradle仓库位置,如何在Android Studio中使用Gradle发布项目至Jcenter仓库

    简述 目前非常流行将开源库上传至Jcenter仓库中,使用起来非常方便且易于维护,特别是在Android Studio环境中,只需几步配置就可以轻松实现上传和发布. Library的转换和引用 博主的 ...

  4. Android Studio中的mavenCentral、jcenter、google仓库

    转载自:https://juejin.cn/post/6844903987557171213 一.Android Studio中依赖是从哪里得到 是从工程的build.gradle里面定义的Maven ...

  5. 【Android Protobuf 序列化】Protobuf 使用 ( protobuf-gradle-plugin 插件简介 | Android Studio 中配置插件 | AS 中编译源文件 )

    文章目录 一.protobuf-gradle-plugin 插件简介 二.Android Studio 中配置 protobuf-gradle-plugin 插件 三.Android Studio 中 ...

  6. android studio 中 gradle 配置与说明

    首先在android studio中,gradle工具版本和gradle版本(或者插件版本).gradle工具版本就是我们安装android studio的时候,同时也会安装gradle工具版本,因为 ...

  7. android studio抛出,Android Studio中新的项目不能运行,抛出错误(Android Studio new pr

    刚才我已经安装,并开始在Android Studio中工作,并配置我需要开始上项目的工作一切之后创建的新项目. 在新创建的项目,我没有改变任何东西,然后试图运行项目. 但它不工作,抛出一些相关性错误, ...

  8. Android Studio 中的 gradle 介绍及build.gradle配置文件详解

    不同于 Eclispse,Android Studio 是采用 Gradle 来构建项目的,Gradle 是一个非常先进强大的项目构建工具,它使用了一种基于 Groovy 领域的特定语言(DSL)来声 ...

  9. 导入eclipse工程到Android Studio中

    ref: 从 Eclipse 迁移至 Android Studio | Android Studio https://developer.android.com/studio/intro/migrat ...

最新文章

  1. CVPR2019|微软、中科大开源基于深度高分辨表示学习的姿态估计算法
  2. DeepChem | PyTorch中用自定义层实现DeepChem的GraphConvLayer
  3. DNSBIND——DNS的子域授权和定义转发服务器
  4. 荣耀9将要回归金属材质,网友直呼:看着就很贵
  5. [洛谷P4705]玩游戏
  6. python填充空值_Python机器学习(九十一)Pandas 填充(Imputation)空值
  7. react 逆地理 高德地图_在react中使用原生的高德地图
  8. 那些年伴我一起成长的SAP装备
  9. 直接销毁_战机报废,发动机怎么处理?美国直接销毁,中国改造成扫雪神器
  10. selenium浏览器驱动下载地址整理
  11. 谈Servlet与JSP
  12. [CMake] 简单的样例工程
  13. 一、理解网络编程和套接字
  14. java学生信息管理系统
  15. 怎样制作网吧服务器,网吧无盘系统怎么做之装置服务器系统
  16. 中望cad文字显示问号怎么办_中望CAD图纸显示乱码?如何快速解决字体问题
  17. CIF/4CIF/QCIF/D1
  18. __stdcall调用约定
  19. 学习之 “Spark的安装配置”
  20. 企业如何通过APS系统进行产能规划?

热门文章

  1. Java实验4-1【数组下标越界异常处理】
  2. 信号与系统—让我们来了解信号
  3. android电视自动关机,android实现自动关机的具体方法代码
  4. 【高性能】Linux挂载GPT硬盘
  5. 数据结构—— 一元多项式的运算(相加,相减,相乘)【C语言实现】
  6. matlab 画图基本介绍
  7. 反向传播 - 李宏毅机器学习笔记
  8. 微信小程序(小程序的生命周期)
  9. 计算机网络 之 网络应用
  10. mysql磁盘阵列部署_部署磁盘阵列