做Android开发难免会遇到在线更新SDK很慢的问题,国内也有很多Android SDK镜像站。
那么可不可以自己在公司内网,或者局域网,或者个人服务器上搭建个Android SDK在线更新镜像服务器呢?
答案是肯定的。
总体思路就是,使用脚本同步google源镜像所有目录之后,把当前目录建立为网站,设置为IDE的代理即可。
建立镜像站点
安装Apache等Web容器,以Apache为例配置域名与别名(没有域名可以使用IP):
1 2 3 4 5 6 |
<VirtualHost *:80> DocumentRoot /data/mirrors ServerName mirrors.skyfox.org ServerAlias dl.google.com ServerAlias dl-ssl.google.com </VirtualHost> |
/data/mirrors作为mirrors.skyfox.org的根路径,你可以使用任何你想要的路径,这里只是一个范例。
ServerName 域名(根路径)+/android/repository/ 就是安卓的镜像文件了
谷歌的镜像站如下格式。
http://dl.google.com/android/repository/
https://dl-ssl.google.com/android/repository/
我们要做的是替换android/repository/之前的域名为我们自己的域名,从而实现代理。所以目录创建要严格按照谷歌。
从谷歌同步源
翻墙后使用同步脚本进行同步,
进入到/data/mirrors文件夹,终端执行python android.py,将会自动下载创建文件。(注意目录的读写权限)
同步脚本中的base_url为谷歌的源地址,也可以换成国内的任意源地址。
out_dir为建立好的源站点目录(/data/mirrors)的子目录(/android/repository/)。
同步成功后即可进行配置Android Studio
同步脚本 android.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
#!/usr/bin/python from string import rfind from time import mktime, strptime from os import makedirs, path, stat, utime from urllib import urlretrieve, urlopen from xml.etree import ElementTree base_url = 'https://dl.google.com/android/repository/' out_dir = '/data/mirrors/android/repository' def download(filename, last_modified): file = out_dir + filename print 'Downloading ' + filename urlretrieve(base_url + filename, file) utime(file, (last_modified, last_modified)) process(filename) def process(filename, size=-1): file = out_dir + filename if path.isfile(file) and stat(file).st_size == size: print 'Skipping: ' + filename return print 'Processing: ' + filename handle = urlopen(base_url + filename) headers = handle.info() content_length = int(headers.getheader('Content-Length')) last_modified = mktime(strptime(headers.getheader('Last-Modified'), '%a, %d %b %Y %H:%M:%S %Z')) if rfind(filename, '/') > 0: dir = out_dir + filename[:rfind(filename, '/')] else: dir = out_dir if not path.isdir(dir): print 'Creating ' + dir makedirs(dir) if not path.isfile(file): download(filename, last_modified) else: file_stat = stat(file) if file_stat.st_mtime != last_modified or file_stat.st_size != content_length: download(filename, last_modified) else: print 'Skipping: ' + filename def fetch(file): if base_url in file: dir = file[len(base_url) - 1:rfind(file, '/') + 1] file = file[rfind(file, '/') + 1:] elif 'http' in file: return else: dir = '/' process(dir + file) base_dir = path.dirname(dir + file) if base_dir != '/': base_dir += '/' tree = ElementTree.parse(out_dir + dir + file) for element in tree.getiterator(): if element.tag.split('}')[1] == 'url': if element.text[-4:] != '.xml': if not 'http' in element.text: process(base_dir + element.text) else: fetch(element.text) for file in ['repository-10.xml', 'addons_list-2.xml']: fetch(file) |
镜像站使用方法
启动 Android SDK Manager ,在『Android SDK Manager - Settings』窗口中,在『HTTP Proxy Server」和「HTTP Proxy Port』输入框内填入镜像服务器地址和端口,并且选中『Force https://... sources to be fetched using http://...』复选框。设置完成后单击『Close』按钮关闭『Android SDK Manager - Settings』窗口返回到主界面;
依次选择『Packages』、『Reload』。
国内现存的镜像站
大连东软信息学院镜像服务器:
http://mirrors.neusoft.edu.cn 端口:80
北京化工大学镜像服务器:
IPv4: http://ubuntu.buct.edu.cn/ 端口:80
IPv4: http://ubuntu.buct.cn/ 端口:80
IPv6: http://ubuntu.buct6.edu.cn/ 端口:80
上海GDG镜像服务器:
http://sdk.gdgshanghai.com 端口:8000
中国科学院开源协会镜像站:
IPV4/IPV6: http://mirrors.opencas.cn 端口:80
IPV4/IPV6: http://mirrors.opencas.org 端口:80
IPV4/IPV6: http://mirrors.opencas.ac.cn 端口:80
腾讯Bugly 镜像:
http://android-mirror.bugly.qq.com 端口:8080
腾讯镜像使用方法: http://android-mirror.bugly.qq.com:8080/include/usage.html
扩展阅读
脚本来自,中科院开源镜像小组 https://github.com/opencas/mirrors
Make a LAN mirror for developing Android apps https://github.com/renfeng/android-repository
转载请注明:天狐博客 » 建立自己的Android SDK镜像站