解決Android SDK / Android Studio(IntelliJ IDEA)更新不了(被牆)的問題,androidintellij
昨天更新android sdk時,發現developer.android.com被牆了,手上也沒有代理,再者android sdk manager更新有個不太好的地方是,只有一台機更新還好,但如果有多台機要更新,每台機都要重新下載一遍,那效率.....
1)先說Android SDK單獨更新的問題
觀察了一下日誌發現
Fetching http://dl-ssl.google.com/android/repository/addons_list-2.xmlFetched Add-ons List successfully
原來它先下載一個源的list,addons_list-2.xml的內容如下,很容易就看出這個list又指示了 各個版本,platform-tools,build-tools......的源list
<sdk:sdk-addons-list xmlns:sdk="http://schemas.android.com/sdk/android/addons-list/2"> <sdk:addon-site> <sdk:url> addon.xml </sdk:url> <sdk:name> Google Inc. </sdk:name> </sdk:addon-site> <sdk:addon-site> <sdk:url> addon-6.xml </sdk:url> <sdk:name> Google Inc. </sdk:name> </sdk:addon-site> <sdk:addon-site> <sdk:url> https://dl-ssl.google.com/glass/gdk/addon.xml </sdk:url> <sdk:name> Glass Development Kit, Google Inc. </sdk:name> </sdk:addon-site> <sdk:addon-site> <sdk:url> extras/intel/addon.xml </sdk:url> <sdk:name> Intel HAXM </sdk:name> </sdk:addon-site> <sdk:sys-img-site> <sdk:url> sys-img/android/sys-img.xml </sdk:url> <sdk:name> Android System Images </sdk:name> </sdk:sys-img-site> <sdk:sys-img-site> <sdk:url> sys-img/android-wear/sys-img.xml </sdk:url> <sdk:name> Android Wear System Images </sdk:name> </sdk:sys-img-site> <sdk:sys-img-site> <sdk:url> sys-img/android-tv/sys-img.xml </sdk:url> <sdk:name> Android TV System Images </sdk:name> </sdk:sys-img-site> <sdk:sys-img-site> <sdk:url> sys-img/google_apis/sys-img.xml </sdk:url> <sdk:name> Google API add-on System Images </sdk:name> </sdk:sys-img-site> <sdk:addon-site> <sdk:url> sys-img/x86/addon-x86.xml </sdk:url> <sdk:name> Google Inc. (x86 System Images) </sdk:name> </sdk:addon-site></sdk:sdk-addons-list>
依次把這些list下載回來,放在根目錄,developer.android.com對我們雖然是被牆了,但還是可以能過迅雷下載回來,
===================================================
現在開始DIY,思路是 dl-ssl.google.com,developer.android.com被牆了,那自己寫個簡單的鏡像server,完整的python代碼如下
#!/usr/bin/env python#coding=utf-8# 在天朝內更新不了android sdk,只能自建鏡像serverimport osimport BaseHTTPServerimport SimpleHTTPServerclass SimpleHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): def __init__(self, request, client_address, server): SimpleHTTPServer.SimpleHTTPRequestHandler.__init__(self, request, client_address, server) def do_GET(self): print "old_path: ",self.path # 把所有URI路徑都redirect到根目錄,因為把所有下載回來的東西都放在根目錄了 self.path = os.path.basename(self.path) SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)def run(server_class=BaseHTTPServer.HTTPServer, handler_class=SimpleHandler): server_address = ('', 80) httpd = server_class(server_address, handler_class) httpd.serve_forever()if __name__ == '__main__': run()需要用root許可權運行這個指令碼,再在host加下這兩條
127.0.0.1 developer.android.com127.0.0.1 dl-ssl.google.com
===================================================
現在再次運行android sdk manager,設定強制使用http,就可以看到有哪些可選的更新項目了
在下載回來的這些xml找到你要下載的URL,再用迅雷下載回來
,放在根目錄
repository-10.xml這個list包含的是這個版本的 SDK Platform,以我下載的4.4.2為例
<span style="color:#ff0000;"><strong><sdk:platform></strong></span> <!-- Generated at Mon Sep 22 15:22:30 2014 from git_klp-sdk-release @ 1456859 --> <sdk:revision>4</sdk:revision> <sdk:description>Android SDK Platform 4.4.2</sdk:description> <sdk:version>4.4.2</sdk:version> <sdk:api-level>19</sdk:api-level> <sdk:min-tools-rev> <sdk:major>22</sdk:major> </sdk:min-tools-rev> <sdk:layoutlib> <sdk:api>12</sdk:api> <sdk:revision>1</sdk:revision> </sdk:layoutlib> <sdk:archives> <sdk:archive> <sdk:size>63871092</sdk:size> <sdk:checksum type="sha1">2ff20d89e68f2f5390981342e009db5a2d456aaa</sdk:checksum> <strong><span style="color:#ff0000;"><sdk:url>android-19_r04.zip</sdk:url></span></strong> </sdk:archive> </sdk:archives> <sdk:uses-license ref="android-sdk-license"/> </sdk:platform>
那麼補上http://dl-ssl.google.com/android/repository/,它的正確下載URL為http://dl-ssl.google.com/android/repository/android-19_r04.zip,開啟迅雷,然後美好的事情就發生了
注意,有些像http://dl-ssl.google.com/android/repository/sys-img/android/sysimg_x86-18_r01.zip是補上http://dl-ssl.google.com/android/repository/sys-img/android/,一般在那個檔案上看一下別的URL你就知道要補上什麼了
下載好所有內容的根目錄布局如下
我已經下載好了我所需要的包,點擊安裝...
2)再說Android Studio(IntelliJ IDEA)更新的問題
android studio每次啟動都要在fetching Android sdk compoment information
1)進入剛安裝的Android Studio目錄下的bin目錄。找到idea.properties檔案,用文字編輯器開啟。
2)在idea.properties檔案末尾添加一行: disable.android.first.run=true ,然後儲存檔案。
3)關閉Android Studio後重新啟動,便可進入介面。
再次啟動,進入介面後,在 Configure -> Settings 把Update給禁止了,
Configure -> Project Defaults -> Project Structure,Android SDK location手工填入上面單獨用Android SDK Manager更新的目錄
再回到主介面時,已經多了一個SDK Manager了
至此,所有的更新都完成了。
最後,別忘了把hosts改回來。
==================================================================
這種方法的缺點是:
手工扒開xml檔案找下載URL
優點是:
多台機器更新很給力
當然如果你是在大公司或是公司網路能....如這個方法不適用你了