Android Studio(1.3版本)設定Gradle代理的正確姿勢
看了下這可是好東西,馬蛋不是每個人都會用vpn的。為了生存不得不去使用Android Studio,然後這個卵東西又是升級更新的特別快,然後真的要去更新還特別 的麻煩。
遭遇
手賤把自己電腦的Android Studio升級到最新的1.3 Preview。然後上星期幫朋友配置Robolectric,要各種下載依賴,結果速度慢得要死。檢查了一下網路連線,囧了,發現沒走梯子(shadowsocks沒速度),直連了,如下圖:
測試
好吧,於是切換了各種代理姿勢:
基本的HTTP Proxy設定
一開始就設定代理到shadowsocks,不過無效
設定編譯引數
1 |
-Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8123 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8123
|
然而並沒有什麼卵用。
設定GRADLE_OPTS環境變數
跟上面的差不多,新建環境變數GRADLE_OPTS,值為以下,不過還是無效
1 |
-Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8123 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8123
|
按照Android Studio的煩人提示,往gradle.properties檔案中新增代理配置
如果使用了AS1.3版本,並按照1那樣設定了代理,就一定會彈出下面這個煩人的提示(最近兩次更新已經提供了閉嘴選項,左下角那裡)
選了Yes的結果就是,專案的gradle.properties檔案中會多了兩句(跟1中的設定對應):
1 2 |
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8123
|
然並卵,還是坑。
P.S. 如果不小心讓這玩意閉嘴了,又捨不得,可以通過修改下列引數再次開啟,具體檔案位置請自行搜尋。
解決
不得不說,Gogole太能玩開發者,自己提供的解決方案,竟然不能用,有考慮過我們這些苦逼的中國開發者的感受麼。
好吧,先搜搜看,就用android studio 1.3 proxy做關鍵詞,別用百度,
然後看我找到了什麼:
Android Studio sets automatically the proxy settings for gradle in gradle.properties.
You should add the proxy-Settings for https, not only for http:
systemProp.https.proxyHost=
systemProp.https.proxyPort=Reproducable in Android Studio 1.3 (AI-141.1989493) (RC3?)
試試看,往專案的gradle.properties裡面多加兩句
1 2 |
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=8123
|
經檢驗,成功啟動代理,麻麻再也不用擔心被牆了。
總結
其實我在1.2版本之前,本人就試過按照上文那樣,在gradle.properties裡面設定過代理,但是那時候只要加了那幾句配置了,AS就會提示找不到依賴,那時候排查了很久,才發現是那裡的問題。
如果是AS1.2或以前,只要在HTTP Proxy那裡設定代理,就能很好地運作.
不過到了AS1.3,情況完全相反,不設定還不行。搞不明白Google修改這個的動機是啥。
雖然找到了方法,不過每個專案的改一下太麻煩了,而且代理什麼的因人而異,如果專案開源了,別人很有可能不需要設定代理,或者使用的是別的代理,這樣修改無異於畫蛇添足。
其實Gralde還提供全域性gradle.properties方案,參考這裡:
Gradle user home是存放依賴庫,還有預設gradle引數的地方,預設在這些資料夾
/home//.gradle/ (Linux)
/Users//.gradle/ (Mac)
C:\Users\.gradle (Windows)
當然,也能通過環境變數GRADLE_USER_HOME來指定,
在Gradle user home資料夾下建立gradle.properties檔案,然後加上代理的配置即可,如下圖
這樣就完成了全域性代理的配置。
附上完整的可選代理配置:
1 2 3 4 5 6 7 8 9 10 11 12 |
# http
systemProp.http.proxyHost=www.somehost.org
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=userid
systemProp.http.proxyPassword=password
systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost
# https
systemProp.https.proxyHost=www.somehost.org
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=userid
systemProp.https.proxyPassword=password
systemProp.https.nonProxyHosts=*.nonproxyrepos.com|localhost
|