Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

113 строки
3.5 KiB

  1. -- 版本对比功能
  2. local newRes = {}
  3. local oldRes = {}
  4. -- 读取xml文件
  5. local function readXml(sourceFile, resList)
  6. local pathName, baseName, ext = string.splitFilename(sourceFile);
  7. if ext ~= "xml" or baseName == "update.json" then
  8. return
  9. end
  10. if resList[baseName] == nil then
  11. resList[baseName] = {}
  12. end
  13. -- 读取xml文件
  14. local fileData = loadfileData(sourceFile)
  15. -- 解密解压数据
  16. local romFileData = cc.FilePackage:decrypt(FilePackage.uncompress(fileData))
  17. -- 解析xml文件
  18. local function onStartElement(name , atts)
  19. if name == "file" then
  20. resList[baseName][atts.name] = atts
  21. end
  22. end
  23. local ret, result = tiny.eval(romFileData , onStartElement)
  24. if ret == nil then
  25. print("文件" .. sourceFile .. "解析失败", result);
  26. end
  27. end
  28. -- 比较具体的目录
  29. local function _compareRes(newPath, oldPath, resultPath, resVersion)
  30. local newResPath = newPath .. "/" .. resVersion
  31. local oldResPath = oldPath .. "/" .. resVersion
  32. local resultResPath = resultPath .. "/" .. resVersion
  33. createDir(newResPath);
  34. createDir(oldResPath);
  35. createDir(resultResPath);
  36. -- 清空下资源
  37. newRes.resVersion = {}
  38. oldRes.resVersion = {}
  39. -- 载入对应目录的xml文件
  40. visitPath(newResPath, readXml, newRes.resVersion);
  41. visitPath(oldResPath, readXml, oldRes.resVersion);
  42. -- 创建一个xml文件
  43. local versionInfo = xml.new("root");
  44. -- 需要更新文件的数量
  45. versionInfo.updateFileCount = 0
  46. -- 需要更新文件的大小
  47. versionInfo.updateFileSize = 0
  48. local xmlFileName
  49. -- 逐个文件对比
  50. for i, v in pairs(newRes.resVersion) do
  51. -- 创建一个xml文件
  52. local fileXml = xml.new("root")
  53. fileXml.updateFileCount = 0
  54. fileXml.updateFileSize = 0
  55. for name, fileInfo in pairs(v) do
  56. -- 获取老版本对应的资源
  57. local oldFileInfo
  58. if oldRes.resVersion[i] == nil then
  59. oldFileInfo = nil
  60. else
  61. oldFileInfo = oldRes.resVersion[i][name]
  62. end
  63. if oldFileInfo == nil or fileInfo.md5 ~= oldFileInfo.md5 then
  64. -- 需要更新这个文件
  65. local fileItem = xml.new("file")
  66. fileItem.origin = fileInfo.origin
  67. fileItem.name = fileInfo.name
  68. fileItem.md5 = fileInfo.md5
  69. fileItem.compressedSize = fileInfo.compressedSize
  70. fileItem.size = fileInfo.size
  71. fileItem.offset = fileInfo.offset
  72. table.insert(fileXml, fileItem)
  73. fileXml.updateFileCount = fileXml.updateFileCount + 1
  74. fileXml.updateFileSize = fileXml.updateFileSize + fileInfo.compressedSize
  75. end
  76. end
  77. -- 保存这个包需要更新的文件
  78. versionInfo.updateFileCount = versionInfo.updateFileCount + fileXml.updateFileCount
  79. versionInfo.updateFileSize = versionInfo.updateFileSize + fileXml.updateFileSize
  80. local xmlInfoData = fileXml:toString();
  81. saveFile(xmlInfoData, resultResPath .. "/" .. i);
  82. end
  83. -- 保存整个需要更新的文件
  84. local xmlData = versionInfo:toString()
  85. saveFile(xmlData, resultResPath .. "/" .. "result.xml");
  86. -- 打印出这次需要更新资源的大小
  87. local updateSizeStr
  88. if versionInfo.updateFileSize / 1024 / 1024 >= 1 then
  89. updateSizeStr = versionInfo.updateFileSize / 1024 / 1024 .. "M"
  90. else
  91. updateSizeStr = versionInfo.updateFileSize / 1024 .. "KB"
  92. end
  93. print(resVersion .. "需要更新的资源包大小:", updateSizeStr)
  94. end
  95. -- 对比两个目录下的资源版本
  96. function compareVersion(newPath, oldPath, resultPath)
  97. -- 比较png
  98. _compareRes(newPath, oldPath, resultPath, "png")
  99. -- 比较etc
  100. _compareRes(newPath, oldPath, resultPath, "etc")
  101. -- 比较pvr
  102. _compareRes(newPath, oldPath, resultPath, "pvr")
  103. end