转载请标明出处:http://blog.csdn.net/xx326664162/article/details/52026975 文章出自:薛瑄的博客

你也可以查看我的其他同类文章,也会让你有一定的收货!

一、在build.gradle文件中依赖一个库

 dependencies {//使用square开源的网络访问框架okhttpcompile 'com.squareup.okhttp:okhttp:2.5.0'
}

在gradle中引用第三方模块时采用maven方式依赖,每次打开Android Studio或者点击sync按钮时,都会去maven中央仓库去取第三方的库文件,一般是jar或者aar文件

如果本地没有该文件,则下载回来,通过网络访问Android Studio中设置的默认的maven中央仓库,可以使jcenter()或mavenCentral(),下载的库默认在c:/user/your name/.m2文件夹里

一般我们使用别人的库需要下载jar文件然后依赖到我们的工程,现在作者将jar文件发布到公共的maven仓库中。同步或编译代码时,Android Studio就会自动下载作者发布的jar(或者aar)文件,如果作者发布了新的版本,则只需要简单的修改一下后面的版本号即可,不要这个库,直接删掉这行代码即可

你可能有疑惑,这条语句是根据什么格式写的?库文件是去哪里下载的??下面就一一为你解惑

二、Maven

2.1、Maven 包

对于 Android 开发者而言,只需要知道 Maven 是一种构建工具,Maven 包是由所谓 POM(Project Object Model)所定义的文件包格式即可。

Gradle 可以使用 Maven 包,而且大部分的 Android 能够使用的远程依赖包都是 Maven 包。

先来看一个托管在某仓库上的 Maven 包:Bugtags-Android-Lib 所包含的内容:

bugtags-lib-1.1.0-javadoc.jar//javadoc 文件
bugtags-lib-1.1.0-javadoc.jar.asc//javadoc 文件的签名
bugtags-lib-1.1.0-sources.jar//源码文件
bugtags-lib-1.1.0-sources.jar.asc//源码文件的签名
bugtags-lib-1.1.0.aar//Android Library 的主文件包
bugtags-lib-1.1.0.aar.asc//主文件包的签名
bugtags-lib-1.1.0.pom//包描述文件
bugtags-lib-1.1.0.pom.asc//描述文件的签名

对于一个合符规范的 Maven Package

  • pom 文件、aar(或者 jar) 文件是必须的。

  • javadoc 文件、源码文件、签名文件都不是必要的,但是某些公开仓库(如 mavenCentral )有此要求。

使用这个包的方式,相信大家已经很熟悉了:

dependencies {compile 'com.bugtags.library:bugtags-lib:1.1.0'
}

POM 文件

一个 Maven Package,最重要就是 POM(Project Object Model) 文件,这其实是一个 XML 文件,这里截取 Bugtags-Android-Lib POM 主要内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><modelVersion>4.0.0</modelVersion><groupId>com.bugtags.library</groupId><artifactId>bugtags-lib</artifactId><version>1.1.0</version><packaging>aar</packaging><dependencies><dependency><groupId>com.android.support</groupId><artifactId>support-v4</artifactId><version>19.0.0</version><scope>compile</scope></dependency></dependencies>
</project>
  • modelVersion: 从 mvn 2.x 起,这个数值都是4.0.0
  • packaging:打包方式,aar 是 Android Libirary 的打包方式,常用的还有 jar
  • dependency:声明依赖列表
  • 包的唯一标示:
<!--包组 id,通常是发布者拥有的域名的反向,以免跟别人的重复-->
<groupId>com.bugtags.library</groupId>
<!--包 artifactId,不好意思我也不知道如何准确翻译,其实就是组以下应该有一个更小的归类-->
<artifactId>bugtags-lib</artifactId>
<!--包版本-->
<version>1.1.0</version>

其中三个字段与 Gradle 的依赖格式 'com.bugtags.library:bugtags-lib:1.1.0' 冒号分割的三段一 一对应。这就解释了所谓的 Gradle 兼容 Maven 包。

2.2、Maven 仓库

Maven 包集中存放的地方,就是 Maven 仓库。这些仓库,可以是放在本地,也可以放在某个远程服务器上。 可以是私有仓库,也可以是公开的。下面是笔者日常开发用的库列表:

mavenCentral();
jcenter()
maven {url 'file:///Users/my-user-name/Documents/Android/repo/'
}
maven {url 'http://192.168.99.100:8081/content/repositories/releases/'
}

Android Studio Gradle 主要支持两个 Maven 中央库:mavenCentral 和 jcenter。

  • mavenCentral ()是最早的 maven 中央仓库,网址:https://jcenter.bintray.com/
  • jcenter() 是 Android Studio 0.8 版本起的默认 maven 中央仓库。网址:http://repo1.maven.org
  • 第三个是笔者的本机的仓库
  • 第四个是笔者部署在内网服务器的私有仓库

读者可能会发现两个问题:

为什么有了 mavenCentral,谷歌还切换到了 jcenter?
maven { url : xxx},这种格式可以配置任何一个存在的仓库?

2.3、jcenter VS. mavenCentral

根据这篇博客,jcenter 具有如下优胜特点,使得谷歌进行切换:

  • jcenter 是一个 mavenCentral 的超集,jcenter 还包含了其他 maven 包
  • jcenter 具有更好的 cdn,默认支持 https,这个对于谷歌有巨大吸引力
  • bintray(jcenter 的服务提供商)表示 jcenter 具有更好的性能
  • 有数据表明 bintray jcenter 占用更少的本地缓存空间
  • 更好的交互界面,可以从 jcenter 向 mavenCentral 同步包(下面两个平台的使用教程将会证实这一点)

    原作者亲测,在 bintray 上发布包到 jcenter 在易用性上的确比 在 sonatype 发布到到 mavenCentral 要好得多。

2.4、使用符合规范的 maven 仓库

没错,你可以通过 maven { url : xxx }使用任何一个符合 maven 规范的仓库。

  • 存在本地的
maven {url 'file:///Users/my-user-name/Documents/Android/repo/'
}
  • 存在内网服务器的
maven {url 'http://192.168.99.100:8081/content/repositories/releases/'
}
  • 存在某个远程服务器的
maven {url 'https://raw.githubusercontent.com/liaohuqiu/umeng-libs/master/repository'
}

2.5、maven的包依赖搜索

网址:http://mvnrepository.com/,库更新及时,而且下载速度也还可以

“central.maven.org” 和”repo1.maven.org”区别

在上面网站找到的库,下载地址都是central.maven.org,而在AS中配置mavenCentral()仓库的下载地址却是repo1.maven.org,这两个速度差距很大.

至于为什么同一个中央库会有两个不同的网址,有点搞不明白

2.6、Maven 依赖搜索顺序

当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:

步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中已被将来引用。
步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库已被将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。

三、Android Studio何时去下载引用的Maven库??

3.1、手动同步

在gradle中引用第三方模块时采用maven方式依赖,点击sync按钮时,会去maven中央仓库去取第三方的库文件,一般是jar或者aar文件

如果本地没有该文件,则下载回来,由于通过网络访问Android Studio默认的maven中央仓库jcenter

点击sync按钮时,即使库文件已经下载到本地了,也会去访问maven仓库的,因此当过多的通过maven方式依赖第三方库的时候Android Studio就会非常慢

3.2、自动同步

Android Studio在编译的时候,如果没有同步第三方代码,或者任何一个gradle文件发生变化后,没有去同步,那么点击运行按钮会自动先同步,也就是先同步后编译,平时我们感觉编译慢的原因主要是同步代码太慢,真正同步完成后编译其实是很快的

maven库依赖过多,同步变慢的问题

推荐的方法是:尽量使用第三方库的jar、aar文件导入自己的项目,或者将第三方库下载到本地,然后当做一个本地模块导入自己的项目,不要再使用gradle中的maven依赖了

删除的时候也很方便,只需删除模块即可,实现模块即插即用,缺点是会导致项目的模块太多,不美观,以及很多eclipse写的库导入Android Studio后还要自己修改才能编译通过,很多库是Android工程,不是标准意义的Android library,

好在现在很多有名的库都专门提供了library,直接导入即可,还有Android Studio已经可以直接将eclipse工程当做一个module导入了,所以这种方法还是很简单的


参考:

[Android Studio系列(三)]Android Studio 编译、同步慢的解决方法

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

Maven最佳实践:Maven仓库

Android Studio Stuck at Gradle Download on create new project

Maven - 仓库

Maven 远程中央仓库镜像

关注我的公众号,轻松了解和学习更多技术

Maven仓库的使用相关推荐

  1. pom文件中引入常用的maven仓库

    给大家分享几个maven仓库,如果本地总是下载很慢的话可以尝试换一下仓库或者多加几个.可以直接拖放在pom.xml中使用. 阿里云仓库 <mirrors><mirror>< ...

  2. 删除maven仓库中的LastUpdated文件

    转自:https://www.oschina.net/code/snippet_151849_49131 maven仓库中的某个构件如果因为网络或者其他的原因,没有下载成功或者下载被中断,将会出现一个 ...

  3. 合并本地Maven仓库

    今天遇到一个问题,就是将一个Maven项目导入到自己的开发环境Myecplise.之前的步骤都很顺利,没有问题,但是到了最后发现pom.xml文件的第一行有一个大红叉,点击错误看,是缺少jar包,但是 ...

  4. 国内阿里Maven仓库镜像Maven配置文件Maven仓库速度快

    国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的maven仓库镜像以备用. 最新更新:2016年11月11日 18:05:40 阿里云提供Maven私服,我把配置文件贴一下,自 ...

  5. 怎样在nexus 中 搜索到远程maven仓库中的jar 文件

    怎样在nexus 中 搜索到远程maven仓库中的jar 文件 url: http://www.oschina.net/question/95712_21999 点击Administration菜单下 ...

  6. 在内网中使用maven_搭建私有maven仓库并在项目中使用

    这是一篇写给女朋友看的教程...前方高能,注意避让~ 1.私有maven仓库的搭建 搭建环境为阿里云ESC服务器,CentOS.确保服务器已经安装Jdk.然后我要手把手教你安装和启动nexus. St ...

  7. [Android]上传到多个Maven仓库的Gradle插件RapidMavenPushPlugin

    博客搬迁至https://blog.wangjiegulu.com RSS订阅:https://blog.wangjiegulu.com/feed.xml RapidMavenPushPlugin 用 ...

  8. 【Maven学习】Nexus私服代理其他第三方的Maven仓库

    一.背景 [Maven学习]Nexus OSS私服仓库的安装和配置 http://blog.csdn.net/ouyang_peng/article/details/78793038 [Maven学习 ...

  9. 国内阿里Maven仓库镜像及自己收集镜像库

    国内阿里Maven仓库镜像Maven配置文件Maven仓库速度快 收集的仓库如下: <?xml version="1.0" encoding="UTF-8" ...

  10. [maven] settings 文件 本地maven仓库

    <?xml version="1.0" encoding="UTF-8"?><!-- Licensed to the Apache Softw ...

最新文章

  1. 2 datax mysql 和 mysql之间相互导入
  2. 《Docker——容器与容器云》:第一章 从容器到容器云
  3. 黄了。Google中国版搜索
  4. 【收集】13款Linux系统有
  5. 范灵俊(1983-),男,博士,中国科学院计算技术研究所工程师.
  6. PHP intval() 函数
  7. SpringSecurity实现记住我功能
  8. shell脚本读取csv文件_shell命令实现txt文件转换为csv文件 | 学步园
  9. c++ 字符串_C/C++字符串大总结(一)
  10. SSM实现增删改查(IDEA)
  11. 微信公众号引流的平台有哪些?
  12. 2021Eclipse最新下载与安装教程
  13. 一键重装系统win8图文教程
  14. state=08S01,code=0
  15. 王者荣耀是用什么编程语言开发的?
  16. 上行OFDMA接入机制(UL-OFDMA)
  17. 选C++还是选Java,过来人给你一个建议
  18. 爬虫基础(6)网页解析之XPath库
  19. 今日芯声 | 为学生佩戴头环监测走神,这就是传说中的“紧箍咒”?
  20. 测不准原理主要指向微观

热门文章

  1. ClassLayout ,JOL Maven地址及锁64位状态图
  2. 增强学习和OpeAI Gym的介绍:基础增强学习问题的演示
  3. JS对DOM节点的操作--增加节点,删除节点
  4. PHP服务器获取客户端IP地址
  5. 中国医学计算机成级别像杂志,中国医学计算机成像杂志
  6. 【c】三角形图形输入 6*11 看懂这一个以后打印图形信手nian来
  7. 《MySQL安装流程详解》及《MySQL安装一直失败,重新安装显示已安装》
  8. codeforces 332b Maximum Absurdity dp
  9. funcode小游戏暑假大作业,开源,新颖,游戏名:凿空,免费。
  10. HTML中图片轮播效果