为什么需要配置阿里云Maven镜像仓库地址
出现的问题
在我们使用Gradle搭建安卓项目骨架时,经常会遇到appcompat-v7
找不到依赖的情况,其报的异常故障码如下:
Failed to resolve: com.android.support:appcompat-v7:XXX
问题分析
之所以会经常出现这种情况,其主要的原因在于Gradle默认使用的是Maven的中央仓库地址,Maven的中央仓库地址为:
https://mvnrepository.com
通过在Maven中央仓库中搜索appcompat-v7
依赖,我们找到的结果如下:
我们可以看到,在Maven中央仓库中appcompat-v7
依赖仅仅只存在两个版本,而最高版本为24.1.1
,上传时间为2016年7月,换言之,安卓的appcompat-v7
在Maven的中央仓库中在2016年7月便已经停止了更新,而这并不表示appcompat-v7
就已经停止了更新,实际上在2016年7月之后,appcompat-v7
依赖还在更新中,只是更新的仓库位置变了,由于谷歌公司自己也搭建了一套Maven中央仓库,而后续的appcompat-v7
依赖的更新也主要是在该Maven仓库中进行。谷歌的Maven中央仓库地址如下:
https://maven.google.com
由于谷歌的Maven中央仓库的服务器毕竟是在国外,访问起来不是很方便,不过在国内的阿里云Maven镜像仓库地址中appcompat-v7
仍然在照常更新,阿里云的国内Maven镜像仓库地址为:
http://maven.aliyun.com/nexus/
在该Maven仓库中,我们搜索appcompat-v7
,得到的结果是:
问题解决
如上图所示,在阿里云的Maven镜像仓库地址中,截止到2018-5-18日,其最高版本已经更新到了28.0.0-alpha1
,所以说我们只要将本地的Gradle中的Maven仓库地址更改成阿里云的即可,更改方式如下:
在Gradle的构建脚本build.gradle
中添加如下语句:
repositories {
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
mavenCentral()
}
compileSdkVersion与appcompat-v7的作用
在安卓中,compileSdkVersion
用于指定构建的SDK版本号,而appcompat-v
依赖的作用在于保证该版本的SDK所编译生成的apk能够进行向下兼容,也正因为如此,一般情况下我们需要将compileSdkVersion
与appcompat-v7
指定相同的版本信息,这样能够保证该版本的SDK所编译生成的apk能够得到最好的appcompat-v
支持,而如果我们在高版本的compileSdkVersion
中选用低版本的appcompat-v7
时,这样我们在Gradle中是能够正常使用的,只是其不能保证兼容所有的当前SDK版本之下的所有版本。而当我们在低版本的compileSdkVersion
中采用高版本的appcompat-v
时,则会出现上面的错误。