1. 程式人生 > >Android Studio(1.3版本)設定Gradle代理的正確姿勢

Android Studio(1.3版本)設定Gradle代理的正確姿勢

看了下這可是好東西,馬蛋不是每個人都會用vpn的。為了生存不得不去使用Android Studio,然後這個卵東西又是升級更新的特別快,然後真的要去更新還特別 的麻煩。

遭遇

手賤把自己電腦的Android Studio升級到最新的1.3 Preview。然後上星期幫朋友配置Robolectric,要各種下載依賴,結果速度慢得要死。檢查了一下網路連線,囧了,發現沒走梯子(shadowsocks沒速度),直連了,如下圖:

沒走代理走直連

測試

好吧,於是切換了各種代理姿勢:

基本的HTTP Proxy設定

基本的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那樣設定了代理,就一定會彈出下面這個煩人的提示(最近兩次更新已經提供了閉嘴選項,左下角那裡)

Proxy Settings提示

選了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