本文章已授權(quán)郭霖微信公眾號轉(zhuǎn)載
- JCenter 遠(yuǎn)程倉庫已經(jīng)宣布停止維護(hù)了嗡髓,經(jīng)過一段時(shí)間的實(shí)踐和踩坑脏里,現(xiàn)在由我來給大家講講 JCenter 停更帶來的影響及分享解決的方案反粥。
進(jìn)入 Bintray 官網(wǎng),就會發(fā)現(xiàn)有一個(gè)很明顯的紅色橫幅军洼,大致的意思是:注意所有 Bintray 服務(wù)將被棄用甘桑,您的帳戶將在 2021 年 5 月 1 日被禁用,學(xué)習(xí)更多的知識。
點(diǎn)擊學(xué)習(xí)更多庸汗,我們可以發(fā)現(xiàn)了 Bintray 官方對本次操作做出的解釋改化,由于全是英文,為了方便大家枉昏,我直接翻譯成中文給大家看:
-
官方主要講了三點(diǎn)內(nèi)容陈肛,分別是:
解釋為什么停止維護(hù)
停止維護(hù)的時(shí)間節(jié)點(diǎn)
常見一些問題的解答
-
為了節(jié)省大家時(shí)間,我對內(nèi)容做了提煉精簡兄裂,為大家簡單解說一下:
Bintray 和 JCenter 因?yàn)閽瓴坏藉X句旱,所以業(yè)務(wù)被砍掉了,需要開發(fā)者提前做一下遷移晰奖。
截止 2021 年 3 月 30 日之后不能上傳任何庫谈撒,2022 年 2 月 1 日之后不能下載任何庫。
停止維護(hù)之后匾南,Bintray 賬戶將被限制登錄啃匿,Bintray 官網(wǎng)將不能被訪問,所有數(shù)據(jù)在最后一天從服務(wù)器中被刪除蛆楞。
影響范圍
- 先來談?wù)勥@次事件帶來的影響:影響范圍很廣溯乒,主要表現(xiàn)為 2022 年 2 月 1 日之后 Android Studio 將無法從 JCenter 倉庫拉取任何代碼庫,統(tǒng)統(tǒng)都會拉取失敗豹爹,間接導(dǎo)致項(xiàng)目無法編譯通過裆悄。
這是創(chuàng)建新項(xiàng)目的遠(yuǎn)程倉庫配置,默認(rèn)只配置了 Google 和 JCenter臂聋,這時(shí)大家心里可能在想:JCenter 倉庫掛掉了沒事光稼,反正還有 Google 倉庫呢。
但事實(shí)卻是:Google 倉庫是谷歌官方的遠(yuǎn)程倉庫孩等,只存放谷歌官方的一些框架艾君,例如 AndroidX 相關(guān)的包都是放在這里的,暫時(shí)不對外開放瞎访,也就是說現(xiàn)在大家用的第三方框架基本都是放在 JCenter 倉庫上腻贰,就問你一句方不方吁恍?慌不慌扒秸?
解決方案
面對問題播演,我覺得只會慌是解決不了問題的,還是得多想想辦法伴奥,而不是坐以待斃写烤,我最近花了很多時(shí)間研究了這個(gè)問題,最后發(fā)現(xiàn)解決這個(gè)問題其實(shí)并不難拾徙,JCenter 倉庫用不了洲炊,可以換成 JCenter 的鏡像倉庫。
在這里我推薦使用 阿里云云效倉庫 和 華為開源鏡像站 來解決這一問題尼啡,在項(xiàng)目根目錄下的
build.gradle
文件中這樣配置:
buildscript {
repositories {
// 阿里云云效倉庫:https://maven.aliyun.com/mvn/guide
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/google' }
// 華為開源鏡像:https://mirrors.huaweicloud.com
maven { url 'https://repo.huaweicloud.com/repository/maven' }
// JitPack 遠(yuǎn)程倉庫:https://jitpack.io
maven { url 'https://jitpack.io' }
// MavenCentral 遠(yuǎn)程倉庫:https://mvnrepository.com
mavenCentral()
google()
jcenter()
}
}
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://repo.huaweicloud.com/repository/maven' }
maven { url 'https://jitpack.io' }
mavenCentral()
google()
jcenter()
}
}
- 這時(shí)大家心中可能有另外一個(gè)疑問暂衡,為什么 JCenter 倉庫掛了,而它的鏡像倉庫卻還能用呢崖瞭?這個(gè)問題要從這個(gè)東西誕生的原因說起狂巢,由于 JCenter 是外國人開發(fā)的,用的是自然是國外的服務(wù)器书聚,所以訪問起來很慢唧领,從這些地方拉代碼自然也快不了,嚴(yán)重影響開發(fā)效率雌续,所以國內(nèi)就誕生了關(guān)于 JCenter 的鏡像倉庫斩个,用于解決這一問題,具體的實(shí)現(xiàn)原理是將 JCenter 倉庫上的代碼庫拷貝一份放到國內(nèi)的服務(wù)器的硬盤上面驯杜,這樣我們再拉取代碼庫就會快很多受啥,而對于 JCenter 停止維護(hù)的事件,其實(shí)就是停止外界對服務(wù)器的訪問艇肴,而如果我們重新指向服務(wù)器地址腔呜,這樣是不是就完美避開了訪問 JCenter 服務(wù)器?從我的認(rèn)知看來是沒有問題的再悼,大家對此也可以提出不同的意見核畴。
遷移方案
上面主要是針對使用者的解決方案,假設(shè)我是開源庫作者冲九,那么該如何應(yīng)對這個(gè)問題呢谤草?
如果是開源庫的作者,只能通過換遠(yuǎn)程倉庫服務(wù)商來解決問題莺奸,不換的話現(xiàn)在代碼庫已經(jīng)上傳不了 JCenter丑孩,從而導(dǎo)致框架無法發(fā)布新的遠(yuǎn)程依賴。
現(xiàn)在除了 JCenter 方案灭贷,其實(shí)還有兩個(gè)備選方案温学,mavenCentral 和 JitPack,這兩個(gè)遠(yuǎn)程倉庫也是比較常用甚疟,經(jīng)過對比仗岖,我最終選擇了 JitPack 作為新的代碼庫存放倉庫逃延,主要的原因也很簡單,相比 mavenCentral轧拄,JitPack 的流程更簡單揽祥,主要表現(xiàn)為不需要注冊賬號,不需要在項(xiàng)目 Gradle 中配置信息檩电,只需要將代碼庫發(fā)布到 Github 即可拄丰,最后在 JitPack 構(gòu)建一下就可以了。
現(xiàn)在由我來給大家演示一下具體的操作方式
第一步:提交代碼到 Github 上面(常規(guī)操作)
第二步:找到 Github 頁面中的 Release 選項(xiàng)
- 第三步:創(chuàng)建一個(gè)新的 release 版本
- 第四步:填寫好相關(guān)的信息
- 第五步:填寫完之后點(diǎn)擊
Publish release
按鈕
- 第六步:打開 JitPack 官網(wǎng) https://jitpack.io/
- 第七步:輸入 Github 地址俐末,并點(diǎn)擊
Look up
按鈕
- 第八步:選擇剛剛創(chuàng)建的 10.5 的版本料按,點(diǎn)擊右邊的
Get it
按鈕
- 第九步:等待構(gòu)建完成,等轉(zhuǎn)圈的圖標(biāo)變成文件的圖標(biāo)就說明已經(jīng)完成
- 第十步:點(diǎn)擊
Get it
按鈕卓箫,這時(shí)會顯示代碼庫遠(yuǎn)程依賴信息
- 至此上傳代碼庫到 JitPack 倉庫的流程已經(jīng)講完站绪,有一點(diǎn)需要的注意是掷匠,我們需要在 Github 項(xiàng)目主頁中提醒開發(fā)者加入:
否則會出現(xiàn)有些開發(fā)者拉取不到代碼庫的問題鸣皂,這是因?yàn)?Studio 創(chuàng)建的工程默認(rèn)只配置了 Google 倉庫和 JCenter 倉庫,默認(rèn)并沒有配置 JitPack 倉庫秉扑。
另外告訴大家一個(gè)好消息甫题,我個(gè)人的所有框架已如數(shù)遷移到 JitPack 倉庫了馁筐,有使用到我寫的框架的同學(xué)可以考慮找一個(gè)時(shí)間點(diǎn),然后做一下統(tǒng)一升級和遷移坠非,點(diǎn)擊此處可以直達(dá) Github 地址敏沉。
友盟遷移
- 隨著 Bintray 的逐漸關(guān)閉,有友盟遠(yuǎn)程依賴的項(xiàng)目也運(yùn)行不起來了炎码,編譯時(shí)提示報(bào)錯(cuò):
Unable to resolve dependency for ':umeng@previewUnitTest/compileClasspath': Could not download common-2.2.5.jar (com.umeng.umsdk:common:2.2.5)
Unable to resolve dependency for ':umeng@preview/compileClasspath': Could not download analytics-8.1.6.jar (com.umeng.umsdk:analytics:8.1.6)
- 然后我去官網(wǎng)看了一下盟迟,果然不出所料,這個(gè)不止是我一個(gè)人的問題潦闲,而是大家都會攒菠。
- 大家可以先看看友盟的公告:【公告】安卓SDK在線依賴庫遷移,看情況是有救了歉闰,然后我按照友盟的提示去做了辖众。
結(jié)果發(fā)現(xiàn)還是不行,不過我發(fā)現(xiàn)最下面有一段話:獲取時(shí)必須為最新版的SDK和敬,頓時(shí)我明白了什么凹炸,原來友盟只放了最新版本在 Maven 庫上面,why昼弟?那我們這些用舊版本的用戶怎么辦啤它?公告上面也沒有寫,友盟這工作做得不到位啊,請?jiān)试S我打個(gè)差評变骡。
不過在我看來解決這個(gè)問題的方法有兩種救欧,大家可以根據(jù)自己的實(shí)際情況而定。
方法一:升級新版本锣光,可以根據(jù)友盟發(fā)布的公告進(jìn)行修改,只不過這種只能升級到最新版本铝耻,當(dāng)然你要是對友盟的 Maven 庫沒有信心誊爹,可以考慮直接下載最新的 Jar 包進(jìn)行離線依賴。
方法二:沿用舊版本瓢捉,這塊的話友盟沒有給出解決方案频丘,但是貿(mào)然升級版本必定存在一定的風(fēng)險(xiǎn),假設(shè)測試同學(xué)沒有空做測試泡态,那么很容易就會出現(xiàn)問題搂漠,這個(gè)時(shí)候?yàn)榱隧?xiàng)目能正常運(yùn)行,又能以最低的成本來做這件事某弦,依賴原有的舊版本就很有必要了桐汤,那么舊版本的 Jar 包該從哪里找呢?我相信很多人第一反應(yīng)是去 Bintray 官網(wǎng)的友盟倉庫中找找看靶壮。
- 正當(dāng)我高興的時(shí)候怔毛,現(xiàn)實(shí)狠狠給我潑了一波冷水,我點(diǎn)擊下載 common-2.2.5.jar腾降,卻發(fā)現(xiàn)結(jié)果是這個(gè)樣子的
頓時(shí)感覺被命運(yùn)扼住了喉嚨拣度,難道就沒有其他辦法了嗎?
答案其實(shí)有的螃壤,我小腦瓜忽然靈機(jī)一動:去 Github 找找看抗果?
事實(shí)證明,只要思想不滑坡奸晴,辦法總比困難多冤馏,你學(xué)廢了嗎?
至于兩種方案要選擇哪種寄啼,我覺得吧宿接,在開發(fā)和測試同時(shí)都能空出人力來做時(shí),可以優(yōu)先考慮升級友盟 SDK 來解決問題辕录,這樣做還有另外一個(gè)好處睦霎,新版本的 SDK 肯定是修復(fù)了舊版本的某些 Bug,不如趁此機(jī)會提升一下應(yīng)用的穩(wěn)定性走诞,但是如果沒有時(shí)間做副女,也可以先考慮直接找舊版本的 Jar 包來解決問題,畢竟項(xiàng)目要能運(yùn)行才是目前最最最重要的事情蚣旱。
到此 JCenter 遷移指南已經(jīng)全部講完碑幅,感謝大家的觀看戴陡,大家有什么問題歡迎在評論區(qū)指出。