Android源代码下载的方式目前一般都是使用Git来下载对应版本的包路径default.xml文件,然后使用脚本语言解析此xml文件来进行下载。目前,使用最多的就是Python编写的脚本来进行下载,参考此篇博客文章:http://blog.csdn.net/hlf48641715/article/details/7188450。但是这个Python下载脚本有问题,用此脚本下载,并没有下载xml包路径下的所有源代码文件。而且,最主要的就是Android源代码越来越大,很少人能够一天就下载下来,此外,如果遇见电脑断电等,某个包没下完还要手动去删除来重新下载,有点麻烦。正好正在学习Lua语言,所以自己就动手使用Lua语言编写了个能完整下载Android源代码的下载脚本。
这个Lua脚本比网上那个Python脚本好的地方是:1.完全下载包路径xml文件所有的源代码包。2.不想下载的时候直接关掉此脚本或者关机,不用挂机下载,下次开机运行此脚本就可以接着上次未下载完的包处继续下载。3.某个包没有下载完,第二次继续下载时不用去看上次哪个包没有下载完成,手动去删除此包再进行下载。
此篇文章是在你已经获得了default.xml文件后继续操作的步骤,如何获得default.xml文件,请参考http://blog.csdn.net/hlf48641715/article/details/7188450此文章。
要能够使用此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 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 i=1,#pro.path,1 do if pro.path[i] then local pathsrc=path.."\\"..pro.path[i] local command="if not exist "..pathsrc.." ( md "..pathsrc..") else ( rd /s/q "..pathsrc..")" os.execute(command) local dl=url..pro.name[i]..suffix.." "..pathsrc os.execute(dl) local file=io.open("data.msg","a+") if file ~= nil then file:write(pro.path[i]) file:write("\n") file:close() end end end end