-- 版本对比功能 local newRes = {} local oldRes = {} -- 读取xml文件 local function readXml(sourceFile, resList) local pathName, baseName, ext = string.splitFilename(sourceFile); if ext ~= "xml" or baseName == "update.json" then return end if resList[baseName] == nil then resList[baseName] = {} end -- 读取xml文件 local fileData = loadfileData(sourceFile) -- 解密解压数据 local romFileData = cc.FilePackage:decrypt(FilePackage.uncompress(fileData)) -- 解析xml文件 local function onStartElement(name , atts) if name == "file" then resList[baseName][atts.name] = atts end end local ret, result = tiny.eval(romFileData , onStartElement) if ret == nil then print("文件" .. sourceFile .. "解析失败", result); end end -- 比较具体的目录 local function _compareRes(newPath, oldPath, resultPath, resVersion) local newResPath = newPath .. "/" .. resVersion local oldResPath = oldPath .. "/" .. resVersion local resultResPath = resultPath .. "/" .. resVersion createDir(newResPath); createDir(oldResPath); createDir(resultResPath); -- 清空下资源 newRes.resVersion = {} oldRes.resVersion = {} -- 载入对应目录的xml文件 visitPath(newResPath, readXml, newRes.resVersion); visitPath(oldResPath, readXml, oldRes.resVersion); -- 创建一个xml文件 local versionInfo = xml.new("root"); -- 需要更新文件的数量 versionInfo.updateFileCount = 0 -- 需要更新文件的大小 versionInfo.updateFileSize = 0 local xmlFileName -- 逐个文件对比 for i, v in pairs(newRes.resVersion) do -- 创建一个xml文件 local fileXml = xml.new("root") fileXml.updateFileCount = 0 fileXml.updateFileSize = 0 for name, fileInfo in pairs(v) do -- 获取老版本对应的资源 local oldFileInfo if oldRes.resVersion[i] == nil then oldFileInfo = nil else oldFileInfo = oldRes.resVersion[i][name] end if oldFileInfo == nil or fileInfo.md5 ~= oldFileInfo.md5 then -- 需要更新这个文件 local fileItem = xml.new("file") fileItem.origin = fileInfo.origin fileItem.name = fileInfo.name fileItem.md5 = fileInfo.md5 fileItem.compressedSize = fileInfo.compressedSize fileItem.size = fileInfo.size fileItem.offset = fileInfo.offset table.insert(fileXml, fileItem) fileXml.updateFileCount = fileXml.updateFileCount + 1 fileXml.updateFileSize = fileXml.updateFileSize + fileInfo.compressedSize end end -- 保存这个包需要更新的文件 versionInfo.updateFileCount = versionInfo.updateFileCount + fileXml.updateFileCount versionInfo.updateFileSize = versionInfo.updateFileSize + fileXml.updateFileSize local xmlInfoData = fileXml:toString(); saveFile(xmlInfoData, resultResPath .. "/" .. i); end -- 保存整个需要更新的文件 local xmlData = versionInfo:toString() saveFile(xmlData, resultResPath .. "/" .. "result.xml"); -- 打印出这次需要更新资源的大小 local updateSizeStr if versionInfo.updateFileSize / 1024 / 1024 >= 1 then updateSizeStr = versionInfo.updateFileSize / 1024 / 1024 .. "M" else updateSizeStr = versionInfo.updateFileSize / 1024 .. "KB" end print(resVersion .. "需要更新的资源包大小:", updateSizeStr) end -- 对比两个目录下的资源版本 function compareVersion(newPath, oldPath, resultPath) -- 比较png _compareRes(newPath, oldPath, resultPath, "png") -- 比较etc _compareRes(newPath, oldPath, resultPath, "etc") -- 比较pvr _compareRes(newPath, oldPath, resultPath, "pvr") end