热更新之生成文件md5
来源:互联网 发布:淘宝手机页面设为首页 编辑:程序博客网 时间:2024/05/18 03:36
cocos2dx中有一个热更新类AssetsManagerEx,用这个类实现热更功能时需要有两个文件,project.manifest以及version.manifest。这里主要是project.manifest文件,里面需要存有资源文件和代码文件的md5值,通过md5的不同得出差异文件然后下载。
这里通过python来实现这两个文件。
创建一个python文件generateManifest.py。
#coding:utf-8import osimport sysimport jsonimport hashlibimport subprocessimport getpassusername = getpass.getuser()# 改变当前工作目录os.chdir('/Users/' + username + '/Documents/client/MyProj/')assetsDir = { #MyProj文件夹下需要进行热跟的文件夹 "searchDir" : ["src", "res"], #需要忽略的文件夹 "ignorDir" : ["cocos", "framework", ".svn"], #需要忽略的文件 "ignorFile":[".DS_Store"],}versionConfigFile = "res/config/version_info.json" #版本信息的配置文件路径versionManifestPath = "res/version/version.manifest" #由此脚本生成的version.manifest文件路径projectManifestPath = "res/version/project.manifest" #由此脚本生成的project.manifest文件路径# projectManifestPath = "/Users/ximi/Documents/client/MyProj/res/version/project.manifest" #由此脚本生成的project.manifest文件路径(mac机)class SearchFile: def __init__(self): self.fileList = [] for k in assetsDir: if (k == "searchDir"): for searchdire in assetsDir[k]: self.recursiveDir(searchdire) def recursiveDir(self, srcPath): ''' 递归指定目录下的所有文件''' dirList = [] #所有文件夹 files = os.listdir(srcPath) #返回指定目录下的所有文件,及目录(不含子目录) for f in files: #目录的处理 if (os.path.isdir(srcPath + '/' + f)): if (f[0] == '.' or (f in assetsDir["ignorDir"])): #排除隐藏文件夹和忽略的目录 pass else: #添加非需要的文件夹 dirList.append(f) #文件的处理 elif (os.path.isfile(srcPath + '/' + f)) and (f not in assetsDir["ignorFile"]): self.fileList.append(srcPath + '/' + f) #添加文件 #遍历所有子目录,并递归 for dire in dirList: #递归目录下的文件 self.recursiveDir(srcPath + '/' + dire) def getAllFile(self): ''' get all file path''' return tuple(self.fileList)def CalcMD5(filepath): """generate a md5 code by a file path""" with open(filepath,'rb') as f: md5obj = hashlib.md5() md5obj.update(f.read()) return md5obj.hexdigest()def getVersionInfo(): '''get version config data''' configFile = open(versionConfigFile,"r") json_data = json.load(configFile) configFile.close() # json_data["version"] = json_data["version"] + '.' + str(GetSvnCurrentVersion()) json_data["version"] = json_data["version"] return json_datadef GenerateVersionManifestFile(): ''' 生成大版本的version.manifest''' json_str = json.dumps(getVersionInfo(), indent = 2) fo = open(versionManifestPath,"w") fo.write(json_str) fo.close()def GenerateProjectManifestFile(): searchfile = SearchFile() fileList = list(searchfile.getAllFile()) project_str = {} project_str.update(getVersionInfo()) dataDic = {} for f in fileList: dataDic[f] = {"md5" : CalcMD5(f)} print f project_str.update({"assets":dataDic}) json_str = json.dumps(project_str, sort_keys = True, indent = 2) fo = open(projectManifestPath,"w") fo.write(json_str) fo.close()if __name__ == "__main__": GenerateVersionManifestFile() GenerateProjectManifestFile()
在我项目的路径下,自己创建一个json文件,里面包含有版本信息等,通过修改这个文件内容然后执行文件generateManifest.py就会生成所需要的文件project.manifest以及version.manifest。
我项目下的version_info.json文件如下
{ "packageUrl" : "http://ip:port/update/MyProj/assets/", "remoteManifestUrl" : "http://ip:port/update/MyProj/version/project.manifest", "remoteVersionUrl" : "http://ip:port/update/MyProj/version/version.manifest", "engineVersion" : "Quick-cocos2dx-3.3", "version" : "1.1.0"}
生成version.manifest如下
{ "packageUrl": "http://ip:port/update/MyProj/assets/", "engineVersion": "Quick-cocos2dx-3.3", "version": "1.1.0", "remoteVersionUrl": "http://ip:port/update/MyProj/version/version.manifest", "remoteManifestUrl": "http://ip:port/update/MyProj/version/project.manifest"}
生成project.manifest如下
{ "assets": { "src/packages/mvc/init.lua": { "md5": "6b9173481a1300c5e737ad5885ebef00" }, "src/protobuf.lua": { "md5": "f790fe35eb179a4341ff41d94e488a5d" } ... }, "packageUrl": "http://ip:port/update/MyProj/assets/", "engineVersion": "Quick-cocos2dx-3.3", "version": "1.1.0", "remoteVersionUrl": "http://ip:port/update/MyProj/version/version.manifest", "remoteManifestUrl": "http://ip:port/update/MyProj/version/project.manifest"}
参考:http://blog.csdn.net/u011488256/article/details/52274826
阅读全文
0 0
- 热更新之生成文件md5
- andfix热修复之生成dex文件
- react native增量热更新生成合并补丁文件
- Unity3D 学习笔记7 —— 获取热更新资源文件的MD5码
- Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
- Unity3D之热更新
- cocos2dx之热更新
- 文件生成MD5 收藏
- MD5 生成文件校验
- c++ 生成文件MD5
- MD5 生成文件校验
- python之生成文件/目录的md5值
- 热更新Tinker研究(七):Dex的patch文件生成
- 热更新Tinker研究(八):res和so的patch文件生成
- Unity 热更新之AssetBundle
- ios之热更新技术
- Android 热更新之tinker
- Unity 热更新之AssetBundle
- TCP UDP TCP/IP Socket Telnet
- 深度剖析OpenGL ES中的多线程和多窗口渲染技术
- 网络笔记
- 10月9日云栖精选夜读:上千家企业将空降云栖小镇,一起见证普惠科技的魅力
- echarts 调整图表大小的方法
- 热更新之生成文件md5
- 线程通信
- TP5 where多条件查询
- Elastic Search快速上手(2):将数据存入ES
- bzoj4145 [AMPPZ2014]The Prices (状压DP)
- 鼠标经过显示下拉选择下拉
- Java调用C++动态库具体实现
- Elastic Search快速上手(3):搜索
- CSS、HTMl使用position: fixed;实现div的高度填满剩余空间