最近在開(kāi)發(fā)中需要測(cè)試以前寫(xiě)的小項(xiàng)目赵誓。結(jié)果忘了換本地的gradle,提示下載失敗柿赊。換了現(xiàn)在用的gradle俩功,項(xiàng)目能跑了。雖然網(wǎng)上有很多很多教程了碰声,但對(duì)我的情況也不是都適用诡蜓。所以自己記錄一下。本人水平有限胰挑,有不對(duì)的地方請(qǐng)幫我指正蔓罚,萬(wàn)分感謝。 如果您很著急瞻颂,請(qǐng)直接看目錄挑選重要部分看豺谈。
前言
離線導(dǎo)入的方式(沒(méi)有使用本地gradle或不修改默認(rèn)倉(cāng)庫(kù)位置的前提下)適合本地項(xiàng)目和修改別人的項(xiàng)目。不太推薦含有g(shù)it并且要推給別人使用贡这,這個(gè)推薦用鏡像茬末。至于為什么,因?yàn)閯e人和您的路徑不同盖矫。當(dāng)您看完本篇文章就知曉了丽惭。同時(shí)也希望您看完了再開(kāi)始配置,根據(jù)需要選擇合適的方式辈双。當(dāng)您看完以后應(yīng)該知曉了下載慢或失敗的原因责掏,也可舉一反三,在充分備份的情況下自行配置湃望。
直接打開(kāi)的效果
如果打開(kāi)的項(xiàng)目與自己本地倉(cāng)庫(kù)里的gradle版本不一致拷橘,哪怕是個(gè)小版本號(hào)不同都會(huì)自動(dòng)下載該項(xiàng)目的gradle。離線導(dǎo)入
要離線導(dǎo)入湃密,我們要知道gradle在我們項(xiàng)目中的作用诅挑。它就是導(dǎo)入依賴的四敞,和Maven類(lèi)似吧,這是我的理解拔妥。那么是導(dǎo)入依賴的工具忿危,必然會(huì)有一個(gè)存儲(chǔ)依賴的本地倉(cāng)庫(kù),不然的話每次下載到項(xiàng)目里没龙,然后每開(kāi)一個(gè)項(xiàng)目就下載一次铺厨?這種蠢事可能也只有我以前還覺(jué)得是合理的哈哈。
本地倉(cāng)庫(kù)
當(dāng)你下載Androidstudio硬纤,配置好了以后解滓,新建一個(gè)項(xiàng)目,就必然會(huì)有一個(gè)當(dāng)時(shí)比較新的gradle下載到了你的本地倉(cāng)庫(kù)筝家。而在安裝的時(shí)候也沒(méi)見(jiàn)到哪兒設(shè)置啊洼裤,也沒(méi)說(shuō)在哪啊。 這時(shí)候你打開(kāi)你的資源管理器溪王,打開(kāi)C盤(pán)腮鞍,找到你自己用的賬戶,進(jìn)去點(diǎn)開(kāi).gradle文件莹菱,這就是默認(rèn)的本地倉(cāng)庫(kù)了缕减。到這里還是沒(méi)有看到自己用的gradle在哪。那點(diǎn)擊wrapper芒珠,里面有一個(gè)dists文件夾,再點(diǎn)進(jìn)去就能看到了帶gradle版本的gradle-x.xx-bin(也有可能這個(gè)是all)的文件夾搅裙。如果好奇皱卓,可以再點(diǎn)進(jìn)去看看,這里不多寫(xiě)了部逮。
沒(méi)錯(cuò)娜汁,本地的倉(cāng)庫(kù)是在C盤(pán),如果您不在意兄朋,可以不用改掐禁,甚至不用看完本篇文章。因?yàn)橹恍枰獙㈦x線的gradle的壓縮包放到dists下面就行了颅和。
更換本地倉(cāng)庫(kù)位置(非必要)
本來(lái)我的存儲(chǔ)空間就很緊張了傅事,更何況是C盤(pán)空間呢,果斷選擇換倉(cāng)庫(kù)的位置峡扩。 首先在你覺(jué)得合理的位置下面新建一個(gè)文件夾(前提是整個(gè)路徑不要有中文蹭越,磁盤(pán)名字不用擔(dān)心,這個(gè)只看盤(pán)符的)教届,其實(shí)名字不一定要寫(xiě)成.gradle一樣响鹃,這是我的倉(cāng)庫(kù)新路徑D:\Gradle\gradle-repository驾霜。然后將原來(lái)的倉(cāng)庫(kù)內(nèi)容直接粘貼復(fù)制過(guò)去,切記不要?jiǎng)h除了买置,否則新倉(cāng)庫(kù)配置失敗粪糙,舊倉(cāng)庫(kù)也不能用了就得不償失了。 接下來(lái)就是修改環(huán)境變量了忿项。新加一個(gè)環(huán)境變量蓉冈,名字為GRADLE_USER_HOME,值為新倉(cāng)庫(kù)的路徑倦卖。有了這個(gè)環(huán)境變量Android studio才會(huì)用新的倉(cāng)庫(kù)洒擦。GradleUserHome位置應(yīng)該就是現(xiàn)在新倉(cāng)庫(kù)的位置了怕膛。
使用離線gradle
到現(xiàn)在我們開(kāi)始正式配置離線gradle內(nèi)容了熟嫩。 首先,我們要去下載項(xiàng)目需要使用的gradle褐捻。當(dāng)然掸茅,其實(shí)完全可以使用已經(jīng)有的gradle,但畢竟我要記錄的是離線加載嘛柠逞,所以我將這個(gè)方法寫(xiě)在后面昧狮。 首先把視圖放在project下,側(cè)邊欄有個(gè)Project板壮,這一欄的最上邊一般是顯示的Android視圖級(jí)別逗鸣,但是在項(xiàng)目進(jìn)行g(shù)radle下載完成或失敗之前會(huì)一直顯示加載,看不到任何內(nèi)容绰精。所以直接換到project級(jí)別下撒璧,打開(kāi)gradle文件夾,下面有一個(gè)配置文件gradle-wrapper.properties笨使。里面的內(nèi)容就是gradle下載的一些信息卿樱。
distributionBase:指向倉(cāng)庫(kù)地址 distributionPath:相對(duì)于distributionBase的解壓后的Gradle的路徑 zipStoreBase:指向倉(cāng)庫(kù)地址,但是這里放的是壓縮包文件 zipStorePath:同distributionPath硫椰,這也是放的是壓縮包文件 distributionUrl:Gradle發(fā)行版壓縮包的下載地址繁调,如果用離線,改成我們的gradle地址
這就是項(xiàng)目用的gradle版本靶草,我這個(gè)項(xiàng)目以前用的是7.0.2蹄胰。如果我不改的話,把版本換成現(xiàn)在使用的版本奕翔,-bin烤送,也有可能現(xiàn)在用的是-all(很少),如果不一致也要一起改糠悯。改完以后還要改gradlePlug版本帮坚,這個(gè)相當(dāng)于是插件妻往,和gradle是兩個(gè)東西,前者是Google的试和,后者是gradle公司的讯泣。這里只是提一嘴。現(xiàn)在主要還是說(shuō)離線的阅悍。
根據(jù)版本去找離線包好渠,以前阿里云好像可以下載,現(xiàn)在不知道节视。這里給一個(gè)鏡像網(wǎng)址:gradle鏡像:https://mirrors.cloud.tencent.com/gradle/ 里面有很多版本拳锚,我們主要找后綴 版本號(hào)-bin.zip的文件。這里我們可以看到7.0有很多版本和不同的命名寻行。
這里淺淺的說(shuō)一下吧:-rc是屬于終版前的一個(gè)版本霍掺,不是最終版,但是如果-rc版本沒(méi)有什么大問(wèn)題拌蜘,就會(huì)成為終版發(fā)布上線杆烁。軟件的話一般還有一個(gè)-Bate版本,表示公測(cè)版本简卧。-bin是這個(gè)已編譯文件兔魂,能夠直接運(yùn)用在項(xiàng)目中,不需要我們?cè)倬幾g举娩;-all不僅有-bin的所用東西析校,還有源碼文檔;-src是源碼铜涉,不能夠直接運(yùn)行在項(xiàng)目中智玻。當(dāng)然這個(gè)是gradle的,不過(guò)大多公司對(duì)軟件的命名也大差不差的骄噪。
1-2-7.png
下載以后得到一個(gè)壓縮包。至于放在哪蠢箩,這個(gè)不用直接放在倉(cāng)庫(kù)链蕊,之前我的倉(cāng)庫(kù)還有一個(gè)父目錄,Gradle的文件夾谬泌,放在它的下面滔韵。 然后我們回到Androidstudio,打開(kāi)gradle-wrapper.properties配置文件掌实,修改distributionUrl的值陪蜻,讓他不去網(wǎng)絡(luò)上的倉(cāng)庫(kù)去下載 (這里其實(shí)我們已經(jīng)知道了為什么導(dǎo)入其它項(xiàng)目真正慢是因?yàn)闊o(wú)法通過(guò)這個(gè)地址去下載到我們需要的gradle,那么是不是改為鏡像下載地址是不是會(huì)好很多呢贱鼻。答案是肯定的宴卖,這里主要是離線的方法滋将,后面會(huì)介紹) ,而是通過(guò)我們指定的位置去下載解壓症昏。我的建議是不要直接去刪除随闽,而是屏蔽掉,防止出問(wèn)題以后沒(méi)有辦法復(fù)原肝谭。下面是我的配置掘宪。
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
檢查無(wú)誤后,點(diǎn)擊同步攘烛。
接著它會(huì)去下載其它依賴魏滚。到這里基本上就成了。當(dāng)然坟漱,可能會(huì)出現(xiàn)一個(gè)叫你的主機(jī)中的軟件中止了一個(gè)已建立的連接鼠次。 錯(cuò)誤,這個(gè)一般是端口被占用了靖秩,如果是筆記本看下是不是用電腦開(kāi)了移動(dòng)熱點(diǎn)须眷,關(guān)掉就好了,如果是其它程序占用(一般不是)沟突,關(guān)閉就好了花颗,如果是adb占用,暫時(shí)退出就好了惠拭。
依賴鏡像(非必要)
等待依賴下載完成扩劝,這個(gè)項(xiàng)目就能跑了。如果不想再折騰的就不用看下面的了职辅。
點(diǎn)開(kāi)build.gradle。這個(gè)是整個(gè)項(xiàng)目的锋边。還有一個(gè)是在app下面的皱坛。如果在Android視圖級(jí)別下,兩個(gè)會(huì)在同一列表豆巨,但是后面會(huì)有一個(gè)冒號(hào)剩辟,:app表示app下的,:項(xiàng)目名表示整個(gè)項(xiàng)目的。我們要更改的就是整個(gè)項(xiàng)目下面的贩猎。不過(guò)有些依賴下載的挺慢的棒呛,甚至?xí) ?duì)于單個(gè)項(xiàng)目域携,我們可以單獨(dú)配置一下簇秒。如果要全局配置,就需要項(xiàng)目用到自己的本地Gradle環(huán)境秀鞭,這個(gè)在下面一節(jié)會(huì)說(shuō)趋观。
添加鏡像地址
mavenLocal() //配置先從本地倉(cāng)庫(kù)尋找jar包熊户,優(yōu)先尋找上一個(gè)配置,找到不執(zhí)行下面的配置
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()
為什么多了一個(gè)allprojects呢融欧,而且和上面的有相同的結(jié)構(gòu)敏弃。buildscript 塊只適用于該 Gradle 構(gòu)建文件中,而 allprojects 塊適用于所有項(xiàng)目和模塊噪馏÷蟮剑可以根據(jù)需要添加
這里就配置好了依賴鏡像,它會(huì)有限去找我們本地的jar包欠肾,沒(méi)有再去鏡像找瓶颠,依次往下。當(dāng)然jar包也是可以離線導(dǎo)入的刺桃,這個(gè)比較簡(jiǎn)單粹淋,這里就不介紹了。 附上一個(gè)阿里云鏡像配置方式
既然依賴可以用鏡像瑟慈,阿里云桃移,騰訊云還有其它鏡像網(wǎng)站也有g(shù)radle的鏡像,打開(kāi)項(xiàng)目會(huì)去找
配置整個(gè)Gradle環(huán)境并應(yīng)用在項(xiàng)目中(非必要)
解壓我們之前下載的gradle離線包葛碧,但是壓縮包不要?jiǎng)h除=杞堋!這時(shí)候我們還需要去配置一下環(huán)境變量进泼。新建一個(gè)名字GRADLE_HOME的變量蔗衡,值為解壓的目錄。然后點(diǎn)開(kāi)path乳绕,如果條目多的話可以直接雙擊打開(kāi)的绞惦。
點(diǎn)擊新建,然后輸入%GRADLE_HOME%\bin洋措,點(diǎn)擊確定济蝉,確定,確定菠发。
這時(shí)候我們用命令窗口(WIN+R輸入cmd)王滤,輸入gradle -v。出現(xiàn)正確的版本雷酪,和信息表示本地gradle配置成功了淑仆。注意這是gradle在本地使用涝婉,可以通過(guò)命令使用了哥力,而不是說(shuō)在Androidstudio中能用了。
這時(shí)候我們打開(kāi)Android studio。點(diǎn)擊File->settings->Build,Exxxx,Dxxxx->Build Tools->Gradle->GradleProjects吩跋。修改UseGradlefrom寞射,改為Specifiledlocation,讓我們自己指定gradle锌钮,選擇我們已經(jīng)安裝的gradle桥温。然后點(diǎn)擊apply或者ok應(yīng)用。
第一個(gè)選項(xiàng)很容易理解梁丘,就是從配置文件中選擇侵浸。
為了演示這里將所有配置還原了,然后刪掉了本地倉(cāng)庫(kù)的gradle
可以看到?jīng)]有經(jīng)過(guò)配置文件去加載氛谜,而是直接運(yùn)行了掏觉。
使用已有的gradle和鏡像導(dǎo)入
鏡像導(dǎo)入
這個(gè)比較簡(jiǎn)單所以放在前面,其主要通過(guò)修改distributionUrl來(lái)實(shí)現(xiàn)值漫。
在前面下載離線gradle的時(shí)候用了一個(gè)鏡像地址澳腹,這是騰訊的,將地址改為https://mirrors.cloud.tencent.com/gradle/gradle-x.x.x-x.zip杨何。 常用的是阿里云的鏡像:https://mirrors.aliyun.com/gradle/gradle-x.x.x-x.zip
當(dāng)然無(wú)論是阿里云的鏡像地址酱塔,還是騰訊的,都要保證鏡像倉(cāng)庫(kù)下有你要的文件(一般都有)危虱。
使用已有的gradle
當(dāng)我們不想要去下載新的gradle羊娃,并且在不影響項(xiàng)目的情況下,我們可以直接用已經(jīng)有的版本槽地。
首先我們還是要更改distributionUrl的內(nèi)容迁沫,但這次不用修改前面了,網(wǎng)絡(luò)地址了捌蚊,而是修改gradle版本號(hào)集畅。比如我現(xiàn)有的gradle是8.0-bin,而這個(gè)項(xiàng)目用的是7.0.2-bin缅糟,那么我直接修改版本號(hào)就行了挺智。因?yàn)檫@個(gè)版本我們是有的,所以他不會(huì)進(jìn)行下載的窗宦。
到這里看起來(lái)好像一切ok赦颇。但我們點(diǎn)擊File->Project Structure->Project「昂可以看到媒怯,下面GradleVersion是gradle版本,而上面那個(gè)gradlePluginVersion則是插件的版本髓窜。他們是有對(duì)應(yīng)關(guān)系的扇苞。當(dāng)你更換了gradle版本以后欺殿,也應(yīng)該更改插件的版本。
以我為例鳖敷,我現(xiàn)在更換了8.0脖苏,那么插件版本該是多少呢,這個(gè)就要查詢官方給的資料了定踱。Android Gradle 插件版本說(shuō)明 網(wǎng)址:https://developer.android.google.cn/studio/releases/gradle-plugin?hl=zh-cn#updating-gradle
可以看到我需要更新到至少8.0的插件版本棍潘。官方的資料里面還有一個(gè)關(guān)于Androistudio版本的限制。這個(gè)我并未驗(yàn)證崖媚,使用無(wú)法進(jìn)行說(shuō)明亦歉。
當(dāng)一切完成以后,這個(gè)項(xiàng)目按道理說(shuō)也能跑了畅哑。因?yàn)锳ndroid版本及其對(duì)應(yīng)API級(jí)別不同而帶來(lái)的錯(cuò)誤這里就不說(shuō)了鳍徽,這個(gè)解決很簡(jiǎn)單的,網(wǎng)上資料也多敢课。
結(jié)尾
我也十分猶豫的寫(xiě)下這篇筆記阶祭。一來(lái)是網(wǎng)上已經(jīng)有很多大神出了教程,我真的有必要再寫(xiě)一篇嗎直秆。二來(lái)是自己不過(guò)半只腳踏入門(mén)的半吊子濒募,真的有資格去寫(xiě)這些嗎,說(shuō)不定還會(huì)誤導(dǎo)他人圾结。于是在寫(xiě)下第一篇筆記后瑰剃,就不敢再怎么寫(xiě)了。但是近期問(wèn)題太多了筝野,有時(shí)候一回想晌姚,這不就是之前遇到過(guò)的嗎,雖然記得歇竟,但是完全忘了怎么操作(經(jīng)驗(yàn)不夠)挥唠,還要重新開(kāi)始搜索資料。效率是比剛開(kāi)始遇到的時(shí)候快焕议,但加在一起還是浪費(fèi)了很多時(shí)間宝磨。為了防止踩過(guò)的坑再踩一次,我還是鼓起勇氣寫(xiě)下了這篇筆記并分享給大家盅安。如果這篇筆記對(duì)你有幫助唤锉,那就太好了,最后感謝您的觀看别瞭。