最近在开发中需要测试以前写的小项目。结果忘了换本地的gradle,提示下载失败。换了现在用的gradle,项目能跑了。虽然网上有很多很多教程了,但对我的情况也不是都适用。所以自己记录一下。本人水平有限,有不对的地方请帮我指正,万分感谢。
如果您很着急,请直接看目录挑选重要部分看。
离线导入的方式(没有使用本地gradle或不修改默认仓库位置的前提下)适合本地项目和修改别人的项目。不太推荐含有git并且要推给别人使用,这个推荐用镜像。至于为什么,因为别人和您的路径不同。当您看完本篇文章就知晓了。同时也希望您看完了再开始配置,根据需要选择合适的方式。当您看完以后应该知晓了下载慢或失败的原因,也可举一反三,在充分备份的情况下自行配置。
如果打开的项目与自己本地仓库里的gradle版本不一致,哪怕是个小版本号不同都会自动下载该项目的gradle。
以前是可以直接下载的,只是很慢。随着版本更新,就无法再连接到官方仓库下载了。这里显示连接超时了,有时候会显示下载失败。
要离线导入,我们要知道gradle在我们项目中的作用。它就是导入依赖的,和Maven类似吧,这是我的理解。那么是导入依赖的工具,必然会有一个存储依赖的本地仓库,不然的话每次下载到项目里,然后每开一个项目就下载一次?这种蠢事可能也只有我以前还觉得是合理的哈哈。
当你下载Androidstudio,配置好了以后,新建一个项目,就必然会有一个当时比较新的gradle下载到了你的本地仓库。而在安装的时候也没见到哪儿设置啊,也没说在哪啊。
这时候你打开你的资源管理器,打开C盘,找到你自己用的账户,进去点开.gradle文件,这就是默认的本地仓库了。
到这里还是没有看到自己用的gradle在哪。那点击wrapper,里面有一个dists文件夹,再点进去就能看到了带gradle版本的gradle-x.xx-bin(也有可能这个是all)的文件夹。如果好奇,可以再点进去看看,这里不多写了。
没错,本地的仓库是在C盘,如果您不在意,可以不用改,甚至不用看完本篇文章。因为只需要将离线的gradle的压缩包放到dists下面就行了。
本来我的存储空间就很紧张了,更何况是C盘空间呢,果断选择换仓库的位置。
首先在你觉得合理的位置下面新建一个文件夹(前提是整个路径不要有中文,磁盘名字不用担心,这个只看盘符的),其实名字不一定要写成.gradle一样,这是我的仓库新路径D:\Gradle\gradle-repository。然后将原来的仓库内容直接粘贴复制过去,切记不要删除了,否则新仓库配置失败,旧仓库也不能用了就得不偿失了。
接下来就是修改环境变量了。新加一个环境变量,名字为GRADLE_USER_HOME,值为新仓库的路径。有了这个环境变量Android studio才会用新的仓库。
这时候我们可以重新打开Androidstudio,点击File->settings->Build,Exxxx,Dxxxx->Build Tools->Gradle
GradleUserHome位置应该就是现在新仓库的位置了。
到现在我们开始正式配置离线gradle内容了。
首先,我们要去下载项目需要使用的gradle。当然,其实完全可以使用已经有的gradle,但毕竟我要记录的是离线加载嘛,所以我将这个方法写在后面。
首先把视图放在project下,侧边栏有个Project,这一栏的最上边一般是显示的Android视图级别,但是在项目进行gradle下载完成或失败之前会一直显示加载,看不到任何内容。所以直接换到project级别下,打开gradle文件夹,下面有一个配置文件gradle-wrapper.properties。里面的内容就是gradle下载的一些信息。
distributionBase:指向仓库地址
distributionPath:相对于distributionBase的解压后的Gradle的路径
zipStoreBase:指向仓库地址,但是这里放的是压缩包文件
zipStorePath:同distributionPath,这也是放的是压缩包文件
distributionUrl:Gradle发行版压缩包的下载地址,如果用离线,改成我们的gradle地址
这就是项目用的gradle版本,我这个项目以前用的是7.0.2。如果我不改的话,把版本换成现在使用的版本,-bin,也有可能现在用的是-all(很少),如果不一致也要一起改。改完以后还要改gradlePlug版本,这个相当于是插件,和gradle是两个东西,前者是Google的,后者是gradle公司的。这里只是提一嘴。现在主要还是说离线的。
根据版本去找离线包,以前阿里云好像可以下载,现在不知道。这里给一个镜像网址:gradle镜像:https://mirrors.cloud.tencent.com/gradle/
里面有很多版本,我们主要找后缀 版本号-bin.zip的文件。这里我们可以看到7.0有很多版本和不同的命名。
这里浅浅的说一下吧:-rc是属于终版前的一个版本,不是最终版,但是如果-rc版本没有什么大问题,就会成为终版发布上线。软件的话一般还有一个-Bate版本,表示公测版本。-bin是这个已编译文件,能够直接运用在项目中,不需要我们再编译;-all不仅有-bin的所用东西,还有源码文档;-src是源码,不能够直接运行在项目中。当然这个是gradle的,不过大多公司对软件的命名也大差不差的。
下载以后得到一个压缩包。至于放在哪,这个不用直接放在仓库,之前我的仓库还有一个父目录,Gradle的文件夹,放在它的下面。
然后我们回到Androidstudio,打开gradle-wrapper.properties配置文件,修改distributionUrl的值,让他不去网络上的仓库去下载 (这里其实我们已经知道了为什么导入其它项目真正慢是因为无法通过这个地址去下载到我们需要的gradle,那么是不是改为镜像下载地址是不是会好很多呢。答案是肯定的,这里主要是离线的方法,后面会介绍) ,而是通过我们指定的位置去下载解压。我的建议是不要直接去删除,而是屏蔽掉,防止出问题以后没有办法复原。下面是我的配置。
distributionBase=GRADLE_USER_HOME
distributionUrl=file:///D:/Gradle/gradle-7.0.2-bin.zip
#distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
检查无误后,点击同步。
接着它会去下载其它依赖。到这里基本上就成了。当然,可能会出现一个叫你的主机中的软件中止了一个已建立的连接。 错误,这个一般是端口被占用了,如果是笔记本看下是不是用电脑开了移动热点,关掉就好了,如果是其它程序占用(一般不是),关闭就好了,如果是adb占用,暂时退出就好了。
等待依赖下载完成,这个项目就能跑了。如果不想再折腾的就不用看下面的了。
不过有些依赖下载的挺慢的,甚至会失败。对于单个项目,我们可以单独配置一下。如果要全局配置,就需要项目用到自己的本地Gradle环境,这个在下面一节会说。
点开build.gradle。这个是整个项目的。还有一个是在app下面的。如果在Android视图级别下,两个会在同一列表,但是后面会有一个冒号,:app表示app下的,:项目名表示整个项目的。我们要更改的就是整个项目下面的。
添加镜像地址
mavenLocal() //配置先从本地仓库寻找jar包,优先寻找上一个配置,找到不执行下面的配置
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
mavenCentral()
为什么多了一个allprojects呢,而且和上面的有相同的结构。buildscript 块只适用于该 Gradle 构建文件中,而 allprojects 块适用于所有项目和模块。可以根据需要添加
这里就配置好了依赖镜像,它会有限去找我们本地的jar包,没有再去镜像找,依次往下。当然jar包也是可以离线导入的,这个比较简单,这里就不介绍了。
附上一个阿里云镜像配置方式
既然依赖可以用镜像,阿里云,腾讯云还有其它镜像网站也有gradle的镜像,打开项目会去找
解压我们之前下载的gradle离线包,但是压缩包不要删除!!这时候我们还需要去配置一下环境变量。新建一个名字GRADLE_HOME的变量,值为解压的目录。
然后点开path,如果条目多的话可以直接双击打开的。
点击新建,然后输入%GRADLE_HOME%\bin,点击确定,确定,确定。
这时候我们用命令窗口(WIN+R输入cmd),输入gradle -v。出现正确的版本,和信息表示本地gradle配置成功了。注意这是gradle在本地使用,可以通过命令使用了,而不是说在Androidstudio中能用了。
这时候我们打开Android studio。点击File->settings->Build,Exxxx,Dxxxx->Build Tools->Gradle->GradleProjects。修改UseGradlefrom,改为Specifiledlocation,让我们自己指定gradle,选择我们已经安装的gradle。然后点击apply或者ok应用。
第一个选项很容易理解,就是从配置文件中选择。
为了演示这里将所有配置还原了,然后删掉了本地仓库的gradle
可以看到没有经过配置文件去加载,而是直接运行了。
这个比较简单所以放在前面,其主要通过修改distributionUrl来实现。
在前面下载离线gradle的时候用了一个镜像地址,这是腾讯的,将地址改为https://mirrors.cloud.tencent.com/gradle/gradle-x.x.x-x.zip。
常用的是阿里云的镜像:https://mirrors.aliyun.com/gradle/gradle-x.x.x-x.zip
当然无论是阿里云的镜像地址,还是腾讯的,都要保证镜像仓库下有你要的文件(一般都有)。
当我们不想要去下载新的gradle,并且在不影响项目的情况下,我们可以直接用已经有的版本。
首先我们还是要更改distributionUrl的内容,但这次不用修改前面了,网络地址了,而是修改gradle版本号。比如我现有的gradle是8.0-bin,而这个项目用的是7.0.2-bin,那么我直接修改版本号就行了。因为这个版本我们是有的,所以他不会进行下载的。
到这里看起来好像一切ok。但我们点击File->Project Structure->Project。可以看到,下面GradleVersion是gradle版本,而上面那个gradlePluginVersion则是插件的版本。他们是有对应关系的。当你更换了gradle版本以后,也应该更改插件的版本。
以我为例,我现在更换了8.0,那么插件版本该是多少呢,这个就要查询官方给的资料了。Android Gradle 插件版本说明 网址:https://developer.android.google.cn/studio/releases/gradle-plugin?hl=zh-cn#updating-gradle
可以看到我需要更新到至少8.0的插件版本。官方的资料里面还有一个关于Androistudio版本的限制。这个我并未验证,使用无法进行说明。
当一切完成以后,这个项目按道理说也能跑了。因为Android版本及其对应API级别不同而带来的错误这里就不说了,这个解决很简单的,网上资料也多。
我也十分犹豫的写下这篇笔记。一来是网上已经有很多大神出了教程,我真的有必要再写一篇吗。二来是自己不过半只脚踏入门的半吊子,真的有资格去写这些吗,说不定还会误导他人。于是在写下第一篇笔记后,就不敢再怎么写了。但是近期问题太多了,有时候一回想,这不就是之前遇到过的吗,虽然记得,但是完全忘了怎么操作(经验不够),还要重新开始搜索资料。效率是比刚开始遇到的时候快,但加在一起还是浪费了很多时间。为了防止踩过的坑再踩一次,我还是鼓起勇气写下了这篇笔记并分享给大家。如果这篇笔记对你有帮助,那就太好了,最后感谢您的观看。