Cause: unable to find valid certification path to requested target(無(wú)法驗(yàn)證請(qǐng)求目標(biāo)的證書(shū))這可能是AndroidStudio最坑的一個(gè)Bug,一般在3.0以上的版本出現(xiàn)。你還在嘗試從著瀏覽器導(dǎo)出證書(shū)?還在試著重裝AndroidStudio?刪除注冊(cè)表?刪除配置?什么???打算重裝系統(tǒng)!!!別再摸不著頭腦瞎搞了!當(dāng)你看到這篇文章時(shí),你已經(jīng)成功一半了,在我寫(xiě)這篇文章之前,網(wǎng)上暫時(shí)沒(méi)有找到同類型的文章,而且經(jīng)過(guò)測(cè)試了不下10臺(tái)不同的電腦,屢試不爽!(我群里人太少了,打個(gè)廣告吧,搞不定加Q群:996246886,在里面問(wèn)我),以下文章有點(diǎn)長(zhǎng),需要耐心看完!
先來(lái)看看android studio報(bào)的錯(cuò)誤:
當(dāng)出現(xiàn)這個(gè)錯(cuò)誤的時(shí)候,你應(yīng)該首先想到的是你的網(wǎng)絡(luò)問(wèn)題,是否能正常獲取該資源,把藍(lán)色報(bào)錯(cuò)的網(wǎng)址復(fù)制到瀏覽器上,如果你發(fā)現(xiàn)能正常下載該資源的話,請(qǐng)繼續(xù)往下看,如果你不能訪問(wèn)到這個(gè)資源,請(qǐng)檢查你網(wǎng)絡(luò)是否有問(wèn)題,是否被墻了【注意:如果你在瀏覽器訪問(wèn)不到這個(gè)資源,請(qǐng)不要再繼續(xù)往下看了,一定要確認(rèn)你的網(wǎng)絡(luò)能正常訪問(wèn)再繼續(xù)往下看教程,你可以嘗試切換網(wǎng)絡(luò),或者使用代理】
簡(jiǎn)單的說(shuō)一下該怎么解決:總的來(lái)說(shuō),還是向你的Java環(huán)境添加證書(shū),是什么原因?qū)е乱砑幼C書(shū)?(據(jù)說(shuō)是因?yàn)槟愕木W(wǎng)絡(luò)處于一個(gè)受限網(wǎng)絡(luò),Java在受限網(wǎng)絡(luò)狀態(tài)下對(duì)證書(shū)有嚴(yán)格的驗(yàn)證,比如公共網(wǎng)絡(luò),校園網(wǎng)絡(luò),公司網(wǎng)絡(luò)等等,但這不是必定的!具體原因有知道的可以告訴我哈)!AndroidStudio3之后,會(huì)自帶Java環(huán)境,在你AndroidStudio的安裝目錄下,有個(gè)jre的文件夾,這其實(shí)是個(gè)jdk,jre里面的還有一個(gè)jre,這才是真正的jre,AndroidStudio運(yùn)行默認(rèn)會(huì)使用這個(gè)Java環(huán)境(除非你在Studio配置過(guò)使用其它的java環(huán)境來(lái)編譯,不然默認(rèn)都是用這個(gè),注意:配置環(huán)境變量JAVA_HOME的是沒(méi)用的,AndroidStudio默認(rèn)不用你的JAVA_HOME),所以我們應(yīng)該是對(duì)AndroidStudio的這個(gè)Java環(huán)境添加證書(shū),那么該怎么添加呢?下面,詳細(xì)說(shuō)一下解決步驟,這幾乎是100%成功哦!
將你電腦的Java環(huán)境變量配置成AndroidStudio的所使用的Java環(huán)境,為什么要配置?這方便等會(huì)添加證書(shū)的時(shí)候是針對(duì)AndroidStudio所使用的Java環(huán)境(注意:如果你電腦已經(jīng)配置好了JAVA_HOME,我仍然建議你暫時(shí)先配置成AndroidStudio的Java環(huán)境,因?yàn)椴煌腏ava版本證書(shū)可能是不一致的,截止發(fā)教程前最新的AndroidStudio3.5.5版本,使用的仍是Java8,但我看到有些人的電腦已經(jīng)配置到Java11了,如果你已經(jīng)配置了,請(qǐng)暫時(shí)先記錄下,然后刪除,等你修復(fù)好AndroidStudio之后,再配置回來(lái))
(1)將AndroidStudio里的jre配置成JAVA_HOME變量
打開(kāi)環(huán)境變量:此電腦->屬性->高級(jí)系統(tǒng)設(shè)置->高級(jí)->環(huán)境變量
配置環(huán)境變量:系統(tǒng)變量新建JAVA_HOME,輸入AndroidStudio目錄下Java的環(huán)境變量,然后確定保存(如圖所示)
然后編輯一下Path環(huán)境變量,在Path環(huán)境變量分別加入%JAVA_HOME%in和%JAVA_HOME%lib(如圖所示)
(2)使用cmd檢查當(dāng)前的java環(huán)境,輸入where java可查到j(luò)ava.exe所在位置
C:UsersAdministrator>where java D:AndroidStudiojreinjava.exe C:UsersAdministrator>
請(qǐng)注意,如果查找不到路徑,或者有多個(gè)路徑,你應(yīng)該刪除掉環(huán)境變量中多余的Java環(huán)境配置,否則后面可能會(huì)導(dǎo)致你失敗。
(1)準(zhǔn)備安裝證書(shū)的java代碼
點(diǎn)擊下載:
InstallCert.zip,InstallCert.java,下載后將其中對(duì)應(yīng)的內(nèi)容替換成自己的報(bào)錯(cuò)的域名,具體操作看下面;
(2)修改代碼
在本例中,我在桌面新建了一個(gè)Cert文件夾,我把InstallCert.java放到了Cert文件夾中,便于修改和管理
修改InstallCert.java代碼中"10.0.31.32"為你在AndroidStudio中無(wú)法驗(yàn)證證書(shū)的域名,改完后應(yīng)該是下面這樣的
String host = "jcenter.bintray.com"; //輸入服務(wù)端地址 int port = 443; //輸入服務(wù)端端口 一般默認(rèn)443
(注意,你的可能是"dl.google.com"或者是"d29vzk4ow07wi7.cloudfront.net",具體的需要看它報(bào)錯(cuò)的域名,如果你是第一次安裝,請(qǐng)一次性加完三個(gè)域名再進(jìn)行后面的操作,也就是你需要進(jìn)行三次javac和三次java命令,這樣出錯(cuò)的概率會(huì)非常低)
(3)獲取證書(shū)
當(dāng)你修改好并保存文件之后,使用cmd進(jìn)入到桌面的Cert目錄,輸入命令javac InstallCert.java,然后按回車來(lái)編譯它
輸入命令java InstallCert,回車進(jìn)行證書(shū)獲取,會(huì)看到下面這樣的結(jié)果后,輸入回車確認(rèn)添加證書(shū)
這是證書(shū)添加成功的結(jié)果,你會(huì)在當(dāng)前目錄得到一個(gè)jssecacerts文件,該文件是經(jīng)過(guò)先獲取到當(dāng)前Java環(huán)境的證書(shū),然后再將代碼中指定網(wǎng)站的證書(shū)合并成一個(gè)新的證書(shū)文件,所以我們后面需要做的是把舊的證書(shū)文件替換成我們現(xiàn)在所生成的新證書(shū)文件
(4)替換證書(shū)文件
打開(kāi)AndroidStudio的安裝目錄,進(jìn)入到j(luò)re->jre->lib->security里,將cacerts重命名成cacerts1,然后把jssecacerts拷貝到當(dāng)前目錄,并命名成cacerts
回到AndroidStudio,選擇“File -> Invalidate Caches / Restart”,這個(gè)時(shí)候,AndroidStudio會(huì)自動(dòng)重啟,如果你的Gradle進(jìn)程沒(méi)有再運(yùn)行,并且運(yùn)行按鈕是灰色的,請(qǐng)點(diǎn)擊“File -> Sync Project with Gradle Files”
到這一步,問(wèn)題基本已經(jīng)解決【請(qǐng)注意,如果你Invalidate Caches / Restart之后,還遇到這個(gè)問(wèn)題,你應(yīng)該查看錯(cuò)誤的域名是不是變了,一般是變成你沒(méi)添加過(guò)的域名,例如:你添加了jcenter.bintrary.com,但你做完以上操作之后,錯(cuò)誤的域名變成dl.google.com或者d29vzk4ow07wi7.cloudfront.net,那么你需要再次添加其它域名的證書(shū),一般出現(xiàn)這個(gè)錯(cuò)誤,那么你通常是要進(jìn)行三次添加證書(shū)操作,然后三次Invalidate Caches / Restart才能解決,如果依舊錯(cuò)誤,可能是操作有誤,可以加我Q群?jiǎn)枂?wèn)哈,例如有多個(gè)java環(huán)境,可能會(huì)導(dǎo)致你卡在無(wú)法使用java InstallCert命令】到此總算解決這個(gè)問(wèn)題了。
文章轉(zhuǎn)載自鏈接:https://www.jianshu.com/p/89ca5b635d3f