解决android sdk更新不了(被墙)的问题
昨天更新android sdk时,发现developer.android.com被墙了,手上也没有代理,再者android sdk manager更新有个不太好的地方是,只有一台机更新还好,但如果有多台机要更新,每台机都要重新下载一遍,那效率.....
观察了一下日志发现
Fetching http://dl-ssl.google.com/android/repository/addons_list-2.xml Fetched 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,只能自建镜像server import os import BaseHTTPServer import SimpleHTTPServer class 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.com 127.0.0.1 dl-ssl.google.com===================================================
现在再次运行android sdk manager,设置强制使用http,就可以看到有哪些可选的更新项目了
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你就知道要补上什么了
下载好所有内容的根目录布局如下
我已经下载好了我所需要的包,点击安装...
最后,别忘了把hosts改回来。
这种方法的缺点是:
手工扒开xml文件找下载URL
优点是:
多台机器更新很给力
当然如果你是在大公司或是公司网络能....如这个方法不适用你了
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。