做Android开发难免会遇到在线更新SDK很慢的问题,国内也有很多Android SDK镜像站。
那么可不可以自己在公司内网,或者局域网,或者个人服务器上搭建个Android SDK在线更新镜像服务器呢?
答案是肯定的。
总体思路就是,使用脚本同步google源镜像所有目录之后,把当前目录建立为网站,设置为IDE的代理即可。
建立镜像站点
安装Apache等Web容器,以Apache为例配置域名与别名(没有域名可以使用IP):
<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
#!/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镜像站
