您的位置:首页 > 移动开发 > Android开发

Windows下完整下载Android源代码

2014-02-27 21:08 281 查看
Android源代码下载的方式目前一般都是使用Git来下载对应版本的包路径default.xml文件,然后使用脚本语言解析此xml文件来进行下载。目前,使用最多的就是Python编写的脚本来进行下载,参考此篇博客文章:/article/7997110.html。但是这个Python下载脚本有问题,用此脚本下载,并没有下载xml包路径下的所有源代码文件。而且,最主要的就是Android源代码越来越大,很少人能够一天就下载下来,此外,如果遇见电脑断电等,某个包没下完还要手动去删除来重新下载,有点麻烦。正好正在学习Lua语言,所以自己就动手使用Lua语言编写了个能完整下载Android源代码的下载脚本。

这个Lua脚本比网上那个Python脚本好的地方是:1.完全下载包路径xml文件所有的源代码包。2.不想下载的时候直接关掉此脚本或者关机,不用挂机下载,下次开机运行此脚本就可以接着上次未下载完的包处继续下载。3.某个包没有下载完,第二次继续下载时不用去看上次哪个包没有下载完成,手动去删除此包再进行下载。

此篇文章是在你已经获得了default.xml文件后继续操作的步骤,如何获得default.xml文件,请参考/article/7997110.html此文章。

要能够使用此Lua脚本,你必须要安装Lua,Lua的下载地址为:http://code.google.com/p/luaforwindows/downloads/list

Lua脚本代码如下,可以复制一下代码到一个文本文件中,然后改后缀名字为.Lua就可以。

-- path为你要存放源代码的目录,一定要是\\,不支持/,会出错找不到目录
-- 若目录名字有空格,应该使用“”括起来,“”要转义,如下的\"Program Files\"
-- git为你git的安装目录
-- C:/Users/wenwei/manifest/default.xml为default所在的目录,根据你下载的路径进行替换
-- 脚本运行会在同级目录在生成data.msg文件,请不要删除或者移动到其它地方

require("LuaXml")
local path="D:\\code2\\src4.4"
local git="D:\\\"Program Files\"\\Git\\bin\\git.exe"
local file=xml.load("C:/Users/wenwei/manifest/default.xml")
local suffix=".git"
local url=git.." clone http://android.googlesource.com/" local DownLoadedPathTable={}
local dlData=io.open("data.msg","r")
if dlData ~= nil then
for data in dlData:lines() do
if type(data)=="string" and data ~= "" and data ~=" " then
data=string.gsub(data,"^%s*(.-)%s*$","%1")
table.insert(DownLoadedPathTable,data)
end
end
else
print("已下载包数据信息文件不存在!若是第一次下载,请忽略此信息!")
end
function find(tag)
local tab={}
tab.path={}
tab.name={}
for i=1,#file,1 do
local attri=file[i]
if type(attri)=="table" then
if attri[0]==tag then
table.insert(tab.path,attri.path)
table.insert(tab.name,attri.name)
end
end
end
return tab
end
local pro=find("project")
for i=1,#pro.path,1 do
pro.path[i]=string.gsub(pro.path[i],"/","\\")
end

for k,v in pairs(DownLoadedPathTable) do
for k1,v1 in pairs(pro.path) do
if v==v1 then
pro.path[k1]=nil
pro.name[k1]=nil
break
end
end
end

if pro ~=nil then
local check="if not exist "..path.." md "..path
os.execute(check)
for k,v in pairs(pro.path) do
local pathsrc=path.."\\"..v
local command="if not exist "..pathsrc.." ( md "..pathsrc..") else ( rd /s/q "..pathsrc..")"
os.execute(command)
local dl=url..pro.name[k]..suffix.." "..pathsrc
os.execute(dl)

local file=io.open("data.msg","a+")
if file ~= nil then
file:write(v)
file:write("\n")
file:close()
end
end
end










                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: