Android导入其它项目慢,Gradel下载失败,另辟蹊径:使用离线gradle加载,附镜像方式

最近在开发中需要测试以前写的小项目。结果忘了换本地的gradle,提示下载失败。换了现在用的gradle,项目能跑了。虽然网上有很多很多教程了,但对我的情况也不是都适用。所以自己记录一下。本人水平有限,有不对的地方请帮我指正,万分感谢。 如果您很着急,请直接看目录挑选重要部分看。

前言

离线导入的方式(没有使用本地gradle或不修改默认仓库位置的前提下)适合本地项目和修改别人的项目。不太推荐含有git并且要推给别人使用,这个推荐用镜像。至于为什么,因为别人和您的路径不同。当您看完本篇文章就知晓了。同时也希望您看完了再开始配置,根据需要选择合适的方式。当您看完以后应该知晓了下载慢或失败的原因,也可举一反三,在充分备份的情况下自行配置。

直接打开的效果

如果打开的项目与自己本地仓库里的gradle版本不一致,哪怕是个小版本号不同都会自动下载该项目的gradle。
1-2-1.png

以前是可以直接下载的,只是很慢。随着版本更新,就无法再连接到官方仓库下载了。这里显示连接超时了,有时候会显示下载失败。
1-2-2.png

离线导入

要离线导入,我们要知道gradle在我们项目中的作用。它就是导入依赖的,和Maven类似吧,这是我的理解。那么是导入依赖的工具,必然会有一个存储依赖的本地仓库,不然的话每次下载到项目里,然后每开一个项目就下载一次?这种蠢事可能也只有我以前还觉得是合理的哈哈。

本地仓库

当你下载Androidstudio,配置好了以后,新建一个项目,就必然会有一个当时比较新的gradle下载到了你的本地仓库。而在安装的时候也没见到哪儿设置啊,也没说在哪啊。 这时候你打开你的资源管理器,打开C盘,找到你自己用的账户,进去点开.gradle文件,这就是默认的本地仓库了。
1-2-3.png

到这里还是没有看到自己用的gradle在哪。那点击wrapper,里面有一个dists文件夹,再点进去就能看到了带gradle版本的gradle-x.xx-bin(也有可能这个是all)的文件夹。如果好奇,可以再点进去看看,这里不多写了。

没错,本地的仓库是在C盘,如果您不在意,可以不用改,甚至不用看完本篇文章。因为只需要将离线的gradle的压缩包放到dists下面就行了。

更换本地仓库位置(非必要)

本来我的存储空间就很紧张了,更何况是C盘空间呢,果断选择换仓库的位置。 首先在你觉得合理的位置下面新建一个文件夹(前提是整个路径不要有中文,磁盘名字不用担心,这个只看盘符的),其实名字不一定要写成.gradle一样,这是我的仓库新路径D:\Gradle\gradle-repository。然后将原来的仓库内容直接粘贴复制过去,切记不要删除了,否则新仓库配置失败,旧仓库也不能用了就得不偿失了。 接下来就是修改环境变量了。新加一个环境变量,名字为GRADLE_USER_HOME,值为新仓库的路径。有了这个环境变量Android studio才会用新的仓库。
1-2-4.png

这时候我们可以重新打开Androidstudio,点击File->settings->Build,Exxxx,Dxxxx->Build Tools->Gradle
1-2-5.png

GradleUserHome位置应该就是现在新仓库的位置了。

使用离线gradle

到现在我们开始正式配置离线gradle内容了。 首先,我们要去下载项目需要使用的gradle。当然,其实完全可以使用已经有的gradle,但毕竟我要记录的是离线加载嘛,所以我将这个方法写在后面。 首先把视图放在project下,侧边栏有个Project,这一栏的最上边一般是显示的Android视图级别,但是在项目进行gradle下载完成或失败之前会一直显示加载,看不到任何内容。所以直接换到project级别下,打开gradle文件夹,下面有一个配置文件gradle-wrapper.properties。里面的内容就是gradle下载的一些信息。

distributionBase:指向仓库地址 distributionPath:相对于distributionBase的解压后的Gradle的路径 zipStoreBase:指向仓库地址,但是这里放的是压缩包文件 zipStorePath:同distributionPath,这也是放的是压缩包文件 distributionUrl:Gradle发行版压缩包的下载地址,如果用离线,改成我们的gradle地址

1-2-6.png

这就是项目用的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的,不过大多公司对软件的命名也大差不差的。


1-2-7.png

下载以后得到一个压缩包。至于放在哪,这个不用直接放在仓库,之前我的仓库还有一个父目录,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
1-2-8.png
1-2-9.png

检查无误后,点击同步。

1-2-10.png

接着它会去下载其它依赖。到这里基本上就成了。当然,可能会出现一个叫你的主机中的软件中止了一个已建立的连接。 错误,这个一般是端口被占用了,如果是笔记本看下是不是用电脑开了移动热点,关掉就好了,如果是其它程序占用(一般不是),关闭就好了,如果是adb占用,暂时退出就好了。

1-2-11.png

依赖镜像(非必要)

等待依赖下载完成,这个项目就能跑了。如果不想再折腾的就不用看下面的了。

不过有些依赖下载的挺慢的,甚至会失败。对于单个项目,我们可以单独配置一下。如果要全局配置,就需要项目用到自己的本地Gradle环境,这个在下面一节会说。

点开build.gradle。这个是整个项目的。还有一个是在app下面的。如果在Android视图级别下,两个会在同一列表,但是后面会有一个冒号,:app表示app下的,:项目名表示整个项目的。我们要更改的就是整个项目下面的。
1-2-12.png

添加镜像地址

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 块适用于所有项目和模块。可以根据需要添加

1-2-13.png

这里就配置好了依赖镜像,它会有限去找我们本地的jar包,没有再去镜像找,依次往下。当然jar包也是可以离线导入的,这个比较简单,这里就不介绍了。 附上一个阿里云镜像配置方式

既然依赖可以用镜像,阿里云,腾讯云还有其它镜像网站也有gradle的镜像,打开项目会去找

配置整个Gradle环境并应用在项目中(非必要)

解压我们之前下载的gradle离线包,但是压缩包不要删除!!这时候我们还需要去配置一下环境变量。新建一个名字GRADLE_HOME的变量,值为解压的目录。
1-2-14.png

然后点开path,如果条目多的话可以直接双击打开的。


1-2-15.png

点击新建,然后输入%GRADLE_HOME%\bin,点击确定,确定,确定。


1-2-16.png

这时候我们用命令窗口(WIN+R输入cmd),输入gradle -v。出现正确的版本,和信息表示本地gradle配置成功了。注意这是gradle在本地使用,可以通过命令使用了,而不是说在Androidstudio中能用了。


1-2-17.png

这时候我们打开Android studio。点击File->settings->Build,Exxxx,Dxxxx->Build Tools->Gradle->GradleProjects。修改UseGradlefrom,改为Specifiledlocation,让我们自己指定gradle,选择我们已经安装的gradle。然后点击apply或者ok应用。

第一个选项很容易理解,就是从配置文件中选择。

1-2-18.png
1-2-19.png

为了演示这里将所有配置还原了,然后删掉了本地仓库的gradle

1-2-20.png

可以看到没有经过配置文件去加载,而是直接运行了。


1-2-21.gif

使用已有的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

当我们不想要去下载新的gradle,并且在不影响项目的情况下,我们可以直接用已经有的版本。

首先我们还是要更改distributionUrl的内容,但这次不用修改前面了,网络地址了,而是修改gradle版本号。比如我现有的gradle是8.0-bin,而这个项目用的是7.0.2-bin,那么我直接修改版本号就行了。因为这个版本我们是有的,所以他不会进行下载的。

1-2-22.png

到这里看起来好像一切ok。但我们点击File->Project Structure->Project。可以看到,下面GradleVersion是gradle版本,而上面那个gradlePluginVersion则是插件的版本。他们是有对应关系的。当你更换了gradle版本以后,也应该更改插件的版本。


1-2-23.png

以我为例,我现在更换了8.0,那么插件版本该是多少呢,这个就要查询官方给的资料了。Android Gradle 插件版本说明 网址:https://developer.android.google.cn/studio/releases/gradle-plugin?hl=zh-cn#updating-gradle

1-2-24.png

可以看到我需要更新到至少8.0的插件版本。官方的资料里面还有一个关于Androistudio版本的限制。这个我并未验证,使用无法进行说明。

1-2-25.png

当一切完成以后,这个项目按道理说也能跑了。因为Android版本及其对应API级别不同而带来的错误这里就不说了,这个解决很简单的,网上资料也多。

结尾

我也十分犹豫的写下这篇笔记。一来是网上已经有很多大神出了教程,我真的有必要再写一篇吗。二来是自己不过半只脚踏入门的半吊子,真的有资格去写这些吗,说不定还会误导他人。于是在写下第一篇笔记后,就不敢再怎么写了。但是近期问题太多了,有时候一回想,这不就是之前遇到过的吗,虽然记得,但是完全忘了怎么操作(经验不够),还要重新开始搜索资料。效率是比刚开始遇到的时候快,但加在一起还是浪费了很多时间。为了防止踩过的坑再踩一次,我还是鼓起勇气写下了这篇笔记并分享给大家。如果这篇笔记对你有帮助,那就太好了,最后感谢您的观看。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容