一、脚本缘起和内容
因为官方是通过Android SDK and AVD Manager来下载的,原先想通过走一个正向代理获得下载URL后再离线下载的,后来想想这玩意儿也应该是有一个总的资源URL文件,然后进行解析再下载的,那我把这个资源文件下载了自己解析不就搞定了么。这个跟前面下载MeeGo和Android的GIT Projects是一个道理。所以就完成了下面这个脚本:
#!/bin/sh
DIR_TARGET="/opt/android/sdk"
FILE_URL="url.sdk"
mkdir -p ${DIR_TARGET} && cd $_
curl -k -sSf 'https:///android/repository/repository.xml' | awk -F'[<>]' '/sdk:url/{print "https:///android/repository/"$3}' > ${FILE_URL}
wget -ci ${FILE_URL}
 
【更新】重新改一下脚本,加上文件校验功能:
#!/bin/sh
DIR_TARGET="/opt/android/sdk"
REPO_URL_BASE="https:///android/repository"
REPO_URL_FILE="repository.xml"
FILE_URL="url.sdk"
FILE_SUM="sdk.sha1sum"
mkdir -p ${DIR_TARGET} && cd ${DIR_TARGET}
curl -k -sSf "${REPO_URL_BASE}/${REPO_URL_FILE}" -o ${REPO_URL_FILE}
awk -F'[<>]' -v RUB="${REPO_URL_BASE}" '/sdk:url/{print RUB"/"$3}' ${REPO_URL_FILE} > ${FILE_URL}
wget -ci ${FILE_URL}
egrep '(sdk:checksum|sdk:url)' ${REPO_URL_FILE} | awk -F'[<>]' '{if(NR%2)A=$3; else print A"  "$3}' > ${FILE_SUM}
sha1sum -c ${FILE_SUM}
二、检验效果
下载任务大概是从2011-02-05 08:56:00开始,2011-02-05 09:02:02秒结束。wget报告说是09:02:02结束,总共耗时5m51s,也就是说wget认为是从08:56:11开始的。这个很正常,因为curl去下载,然后awk再解析生成url.sdk文件,该文件的时间戳是2011-02-05 08:56:07,然后wget要经历很多文件内容处理和URL域名解析啥的,也还是需要时间的。:D
 
wget下载完毕后的报告:
FINISHED --2011-02-05 09:02:02--
Downloaded: 34 files, 1.7G in 5m 51s (4.89 MB/s)
嘿嘿……速度很快吧!
 
NDK也可以离线下载,只是暂时还没有直接获得URL的方式。暂时只能老实地弄个URL后再下载。
网上已经有很多关于Android SDK/NDK等离线下载的论文,各位可以参考,找出适合自己的方法。