欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

AndroidStudio中緩存的示例分析-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)Android Studio中緩存的示例分析,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)建站客戶idc服務(wù)中心,提供四川服務(wù)器托管、成都服務(wù)器、成都主機(jī)托管、成都雙線服務(wù)器等業(yè)務(wù)的一站式服務(wù)。通過(guò)各地的服務(wù)中心,我們向成都用戶提供優(yōu)質(zhì)廉價(jià)的產(chǎn)品以及開(kāi)放、透明、穩(wěn)定、高性價(jià)比的服務(wù),資深網(wǎng)絡(luò)工程師在機(jī)房提供7*24小時(shí)標(biāo)準(zhǔn)級(jí)技術(shù)保障。

先說(shuō)一下背景。

我負(fù)責(zé)的一個(gè)項(xiàng)目,對(duì)一個(gè)圖表庫(kù)有外部依賴。這個(gè)圖表庫(kù)是我在維護(hù)的,由于新功能在開(kāi)發(fā)中,所以我就使用了 SNAPSHOT 版本發(fā)布到 OJO(oss.jfrog.org) 上。我在項(xiàng)目中剛更新了依賴,忽然想到還少幾個(gè) API,于是發(fā)布了 SNAPSHOT 版本。

故事就這樣開(kāi)始了。

這時(shí)候回到 AndroidStudio 再去 Sync Project with Gradle Files 肯定是拉不下來(lái)的。眾所周知,Gradle 的緩存策略中,對(duì)于 SNAPSHOT 版本默認(rèn)的緩存周期是 24 小時(shí),也就是從我上次更新之后,24小時(shí)內(nèi)都會(huì)使用上次的緩存。

不周知的也沒(méi)關(guān)系,我在這里補(bǔ)充說(shuō)明一下,在 Gradle 用戶指南的依賴管理一章中,有提到 Gradle 對(duì)于動(dòng)態(tài)版本和變化模塊的緩存時(shí)間默認(rèn)是 24 小時(shí)。

何為動(dòng)態(tài)版本?你見(jiàn)過(guò)的像 3.+ 這種就是動(dòng)態(tài)版本,它會(huì)取檢查到的最高的版本號(hào)。又比如 latest.integration ,它也是動(dòng)態(tài)版本。

而變化模塊,就是像 0.2-SNAPSHOT 這種后面帶 SNAPSHOT 的版本了。

這兩者的區(qū)別就是,前者盡管你代碼中的版本號(hào)寫法不變,但實(shí)際上它仍然是去取倉(cāng)庫(kù)的最新版本。而后者它在倉(cāng)庫(kù)中的版本號(hào)還是一樣,仍然是 xxx-SNAPSHOT ,但實(shí)際上這個(gè)版本所對(duì)應(yīng)的內(nèi)容已經(jīng)變了。

這里再多說(shuō)幾句,緩存周期也是可以修改的,在 Gradle 用戶指南中同樣有詳細(xì)說(shuō)明,就是添加如下配置:

configurations.all {
  resolutionStrategy.cacheDynamicVersionsFor 10, 'minutes' // 動(dòng)態(tài)版本
  resolutionStrategy.cacheChangingModulesFor 10, 'minutes' // 變化模塊
}

只是這里我一開(kāi)始就貪省事,在更新依賴懶得去改。

既然如此,那怎么辦?把 ~/.gradle/caches 整個(gè)給干掉?

不不不,那樣太小題大做。其實(shí)這個(gè)問(wèn)題我早已遭遇過(guò),并且對(duì)于“漢化”過(guò)一遍 Gradle 用戶指南的我來(lái)說(shuō)太簡(jiǎn)單了。命令行下執(zhí)行:

./gradlew aTD --refresh-dependencies

這里啰嗦一下, aTD 是項(xiàng)目中一個(gè) Gradle 任務(wù)的縮寫,全名是 assembleTestingDebug ,其中 Testing 是項(xiàng)目里的一個(gè) ProductFlavor 。這并不重要, 重點(diǎn)是后面的參數(shù) --refresh-dependencies ,加上這個(gè)參數(shù),表示強(qiáng)制刷新依賴。

但是回到 AndroidStudio 寫代碼,發(fā)現(xiàn)代碼提示中新的 API 還是沒(méi)有出來(lái)??磥?lái)是 Android Studio 沒(méi)有更新。不過(guò)沒(méi)關(guān)系,這事我也有經(jīng)驗(yàn)。點(diǎn)開(kāi)右邊的 Gradle 面板,找到 androidDependencies 任務(wù),右鍵, Create xxxxx Configuration ,然后在彈出的面板的 Arguments 一欄中輸入前面提到的參數(shù) --refresh-dependencies ,添加完,在運(yùn)行那里選擇它執(zhí)行。

Android Studio中緩存的示例分析

等執(zhí)行完,按照幾年前的經(jīng)驗(yàn),這時(shí)候應(yīng)該出來(lái)了吧?

然而,實(shí)際上并沒(méi)有。

這時(shí)候我忽然想起,我們公司在阿里云服務(wù)器上搭建了一個(gè) maven 游戲,去年的時(shí)候我在上面配置了對(duì) OJO 的代理,這時(shí)候拉取的是游戲上的版本,是它沒(méi)有更新?

沒(méi)關(guān)系,解決方法很簡(jiǎn)單,刪!

于是我登錄到 nexus 上,找到緩存的這個(gè)庫(kù),右鍵,整個(gè)版本刪掉。刪了服務(wù)器上的之后,還覺(jué)得不放心,于是再把 .gradle 里的緩存給找出來(lái)刪掉,我當(dāng)時(shí)應(yīng)該是這樣子的:

Android Studio中緩存的示例分析

使用 nexus 搭建 maven 游戲有幾種好處,一是可以放公司內(nèi)部的庫(kù);二是配置對(duì)其他 maven 倉(cāng)庫(kù)的代理,當(dāng)有人去訪問(wèn)某一個(gè)依賴時(shí)它就會(huì)緩存下來(lái),下次其他人再訪問(wèn)同一個(gè)依賴的話它就會(huì)直接取緩存,對(duì)于一些在國(guó)內(nèi)訪問(wèn)不是很友好的倉(cāng)庫(kù)如 jcenter,能有效減少等待時(shí)間。當(dāng)然如果公司內(nèi)部局域網(wǎng)部署一個(gè)的話,提升效果會(huì)更顯著。

最后再執(zhí)行前面步驟。命令行中已經(jīng)可以看到重新下載了這個(gè)依賴了,并且我也檢查了 .gradle/caches/modules-2 下對(duì)應(yīng)的源碼 jar 包,確實(shí)是更新了。

再回到 Android Studio,發(fā)現(xiàn)依然沒(méi)有更新。

這什么情況?

我疑惑了一下,心中一個(gè)聲音響起:

?。ㄟ@里應(yīng)讀四聲)!

這時(shí)候我想到了,新版的 Android Studio 為了提速,多了一層緩存:對(duì)于第三方依賴會(huì)把它們解壓出來(lái),放到 ~/.gradle/caches/transforms-1 目錄中。

于是繼續(xù):

刪!

find . -name "hichart*" |xargs rm -rf

然后再構(gòu)建,讓它重新緩存,這時(shí)候應(yīng)該就可以了吧。

在 Android Studio 中執(zhí)行了構(gòu)建,然后發(fā)現(xiàn)它確實(shí)重新緩存了。但是——

悲劇就此發(fā)展,深坑就此塌陷!

這時(shí)候,我發(fā)現(xiàn)不單是新加的 API 沒(méi)有出來(lái),編輯器里有關(guān)這個(gè)庫(kù)的代碼全都變紅了!盡管!項(xiàng)目還是能跑起來(lái)!當(dāng)時(shí)的屏幕是這樣的:

Android Studio中緩存的示例分析

不對(duì)不對(duì)。咋回事?

這時(shí)候我又機(jī)智地想到,這里緩存的路徑有包含 hash 作為名稱的文件夾,更新了之后,hash 值也不同了,所以應(yīng)該是哪里的索引沒(méi)有對(duì)應(yīng)上。于是找啊找,就在 transforms-1/metadata-1.1 中發(fā)現(xiàn)了一個(gè)叫 results.bin 的文件。再搜一下里面有沒(méi)有包含那個(gè)庫(kù)的內(nèi)容:

cat results.bin| grep "hichart"

提示是二進(jìn)制文件。哦,那就加個(gè)參數(shù):

cat results.bin| grep -a "hichart"

結(jié)果出來(lái)了,果然有。那好,那就再刪!

等等——我這時(shí)謹(jǐn)慎了一下,還是重命名一下好了。于是重命名,然后再執(zhí)行構(gòu)建,然后看到這個(gè)文件重新生成了,看起來(lái)正朝預(yù)料中的發(fā)展。然而,有關(guān)這個(gè)庫(kù)的引用還是報(bào)錯(cuò)。

這時(shí)候的我陷入了一番沉思,再試其他方法:

  1. Sync with File System

  2. Sync Project with Gradle Files

  3. File -> Invalidate Caches / Restart

還是無(wú)效。帶著郁悶,我下班了。

雖然這問(wèn)題此刻表現(xiàn)得如此頑固,但是最終它還是被我解決了。

早上一來(lái),我覺(jué)得我應(yīng)該是有點(diǎn)急了,畢竟項(xiàng)目的開(kāi)發(fā)時(shí)間由此被我拖多了一天了,但是作為一名有著一顆運(yùn)維的心的程序員,自己踩陷的坑無(wú)論怎樣也要把它踩平。

于是我開(kāi)始往其他緩存方面上考慮,也沒(méi)有去想合不合邏輯。我想到了 Gradle 在構(gòu)建時(shí)會(huì)對(duì)一個(gè)任務(wù)的輸入做快照,于是找到項(xiàng)目里的 .gradle/buildOutputCleanup 目錄,刪!

還不行,那就 .gradle/4.4 (當(dāng)前使用的 Gradle 版本),刪!

還不對(duì),那就整個(gè) .gradle ,刪!

甚至, ~/.gradle/caches/transforms-1/ ,刪!

依然不對(duì),那就 Android Studio 的配置文件夾, ~/.AndroidStudio3.1 ,刪!

刪完重新打開(kāi) Android Studio 導(dǎo)入配置,這時(shí)候發(fā)現(xiàn)已經(jīng)不是之前的問(wèn)題了,你以為問(wèn)題解決了嗎?不!是問(wèn)題升級(jí)了!這時(shí)候已經(jīng)不是那個(gè)庫(kù)報(bào)紅了,而是所有引用第三方庫(kù)的地方都報(bào)紅了?。?!盡管,還是可以運(yùn)行起來(lái)?。?/p>

百般無(wú)奈之下,繼續(xù) google,看到的還是前面提到的 Invilate Cache 的方法。忽然在 Stackoverflow 中看到了一個(gè)看起來(lái)不是很常見(jiàn)的回答:

退出 Android Studio,刪除所有的 .iml 文件以及 .idea 目錄,打開(kāi) Android Studio 重新導(dǎo)入項(xiàng)目。

咦?這方法沒(méi)試過(guò)。那就試試吧:

find . -name "*.iml" |xargs rm
find . -name ".idea" |xargs rm -rf

然后重新打開(kāi) Android Studio,點(diǎn) Sync with File System ,這時(shí)候奇跡終于出來(lái)了,應(yīng)該說(shuō),Android Studio 終于正常了,編輯器不報(bào)紅了!

壓抑著心中的萬(wàn)分激動(dòng),有著打破沙鍋問(wèn)到底精神的我,對(duì)此問(wèn)題仍不放棄思考。

所以,究竟是什么原因呢?

我看了一下 .iml 文件,沒(méi)什么異常。那就再看.idea 目錄。

find .idea -type f |xargs grep "hichart"

結(jié)果如下:

Android Studio中緩存的示例分析

原來(lái)是在 .idea/libraries 里會(huì)記錄每一個(gè)第三方庫(kù)的 classes, javadoc 以及 sources 所對(duì)應(yīng)的路徑。其中 classes 對(duì)應(yīng)的正是前面所提到的 transforms-1 里的目錄,同樣也正如前面所說(shuō),其中包含的路徑是有 hash 值的,更新了依賴之后,hash 值不同,新的緩存路徑也就不同了,而這里還是用的原來(lái)被刪的那個(gè)路徑,找不到對(duì)應(yīng)的文件當(dāng)然編輯器里就提示 cannot resolve symbol 了。所以正確而直接的解決方案應(yīng)該是刪除 .idea/libraries/ 里對(duì)應(yīng)該第三方庫(kù)的 xml 文件讓它重新生成,或者是直接修改該 xml 文件的內(nèi)容,改為更新依賴之后的路徑。

關(guān)于“Android Studio中緩存的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

分享標(biāo)題:AndroidStudio中緩存的示例分析-創(chuàng)新互聯(lián)
文章起源:http://aaarwkj.com/article46/gishg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站建設(shè)、微信小程序網(wǎng)頁(yè)設(shè)計(jì)公司、ChatGPT營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
這裏隻有无码人妻久久| 日本午夜熟女九色视频| 欧美伊人色综合久久天天| 亚洲精品网站国产高清| 久久偷拍一区二区三区| 亚洲av粉色一区二区三区| 日本欧美自拍偷拍高清| 日本毛茸茸的丰满熟妇| 天堂av在线观看播放| 中文字幕一区二区精品人妻| 亚洲精品国产自在现线| 中文字幕av久久激情| 精品啪在线观看国产熟女| 五月婷婷丁香噜噜噜噜| 精精国产xxxx视频在线不卡| 亚洲国产免费一区二区| 国产成人一区二区二区三区| 在线观看后入大屁股| 97人妻人人揉人人澡人人学生| 亚洲国产日韩欧美第一页| 亚洲成人精品久久久| 国产毛片久久久久久国产| 国产精品免费视频一区二区三区| 另类激情综合在线观看| 国产,欧美,日韩,日日骚| 国产亚洲中文久久网久久| 国产成人精品手机在线观看| 国产精品一区二区三区日本| 丁香六月五月色婷婷网| 天天操操操操操操夜夜爽| 亚洲va久久久噜噜噜久久狠| 日本岛国大片在线视频| 免费毛片一区二区三区| 久久精品国产亚洲av清纯 | 亚洲成在人天堂一区二区| 久久碰国产一区二区三区| 国产精品黄色片在线观看| 久久综合色爱综合欧美| 久久国产精品欧美熟妇| 国产真人作爱视频免费| 中文字幕一区二区三区不卡日日|