和许多人的思路一样。我也是通过解析platform/mainfest/default.xml,然后通过组合git命令,来实现安卓源码的。
我只是个python的初学者。花一个晚上,边查边写边测。终于是写了这一小段代码。
今天挂机下载测试,情况OK。可能是因为我是翻墙下载的缘故,下的很顺畅,基本没有发现链接挂起的问题。
脚本写的很简单,用beautiful soup来解析下载下来的xml,用着觉得挺方便。
'''
Created on Jul 30, 2013
@author: turbinyan
'''
import os
from bs4 import BeautifulSoup
git_cmd_prefix = "git clone https://android.googlesource.com/"
g_SrcPath = './'+'android-4.0.4_r1.1/'
g_filePath = g_SrcPath+"mainfest.xml"
def downloadMainfest(version):
path = "./"+version
if not os.path.exists(path):
os.mkdir(path)
g_filePath = path+"/mainfest.xml"
cmd = "curl https://android.googlesource.com/platform/manifest/+/"+version+"/default.xml >>"+g_filePath
os.system(cmd)
print("cmd:"+cmd+"excution well!")
def paseDownloadList(xml):
downloadList = set()
xmlSoup = BeautifulSoup(xml, 'xml')
for link in xmlSoup.find_all('project'):
downloadList.add(link.get('name'))
return downloadList
def getContent():
print("path "+g_filePath)
with open(g_filePath,'rt') as fXmlData:
xmlSoup = BeautifulSoup(fXmlData, 'xml')
try:
return str(xmlSoup.pre.get_text())
except:
print("xml find all error")
def download(a_list):
print('download list'+str(a_list))
for path in a_list:
try:
cmd = git_cmd_prefix+path +' '+ g_SrcPath+path
print('exec cmd: '+cmd)
os.system(cmd)
except:
print("download "+path+" is error!")
if __name__ == '__main__':
print("main looper run")
downloadList = paseDownloadList(getContent())
download(downloadList)
print('well done! finished!')