gradle相关问题总结
gradle和gradle plugin配置
android studio在编译的过程中,经常因为gradle和gradle plugin的下载导致编译时间慢或者一直卡在那里,很多都被屏蔽了,无法访问。今天总结一下常见的几个问题以及解决方法。
首先,要知道gradle和gradle plugin是两个东西,很多人经常把这两个东西弄混。
Gradle

图1
如果选择“Use default gradle wrapper(recommended)”,gradle配置的是Service directory path。

图2
上图的文件中有一行配置,例如:distributionUrl=http****:****//10.251.47.180/distributions/gradle-2.14.1-all.zip</pre>
如果Service directory path中没有该版本的gradle,就会从上面的网址中下载,这时,如果网络有问题,就会出问题。要是出现这种无法下载的情况,修改的方法就有很多了:
-
改善网络环境,使能够访问上面的地址下载gradle
-
将distributionUrl中的gradle版本改成Service directory path中有的版本,就不会从网上下载了。
-
将distributionUrl的版本先下载下来,然后离线配置到Service directory path中去。
如果选择“Use local gradle distribution”,gradle配置的是Gradle home。
Gradle plugin
Gradle和Gradle plugin有一个对应关系,如果版本差距太大会报错。Gradle plugin的配置在build.gradle中。如下图

图3
可以把这个插件就看成一个依赖库,缓存的位置等都是一样的。如果这里的版本本地没有,而网络环境又有问题,就会报找不到依赖库同样的问题。
Offline mode是什么?
见图1,offline mode如果不勾选,as会自动下载依赖。如果勾选,就会使用本地的包。本地包的地址是
C:\Users\l00405365.gradle\caches\modules-2\files-2.1
在线下载的包去哪里了?
C:\Users\l00405365.gradle\caches\modules-2\files-2.1
Gradle使用Maven本地缓存库
如果想使用Maven本地缓存,需要定义:build.gradle 文件下定义
build.gradle
repositories {
mavenLocal()
}
Gradle使用与Maven相同的策略去定位本地Maven缓存的位置。如果在settings.xml中定义了本地Maven仓库的地址,则使用该地址。
在USER_HOME/.m2下的settings.xml文件中的配置会覆盖存放在M2_HOME/conf下的settings.xml文件中的配置。
如果没有settings.xml配置文件,Gradle会使用默认的USER_HOME/.m2/repository地址。
gradle本地配置时找不到包的解决方法
因为我们是在离线模式下进行gradle的,引用的是C:/Users/xxxx/.gradle文件。所以,在提示不能下载此jar包时,往往是因为gradle\caches\modules-2\metadata-2.16\descriptors目录下,没有对应的jar包。
举个例子:比如说junit:4.12.jar。一般在gradle\caches\modules-2\metadata-2.16\descriptors目录下会存在一个junit目录,但是你点击进去之后发现,其实4.12目录下没有对应的jar包。
解决方法:只需将下载好jar包放入gradle\caches\modules-2\metadata-2.16\descriptors目录下对应的目录即可。