md5热更新下载目录和版控文件的生成

本文介绍了cocos2dx-lua热更新中版本控制文件的生成,包括versionCheck.json和versionAsset.json的用途。通过在src同级目录下创建create_version.bat和create_version.py,执行脚本生成版控文件,并详细阐述了操作步骤。最后,将生成的文件放入相应目录,为热更新测试做好准备。
摘要由CSDN通过智能技术生成

前言:若读者对热更新的基础知识点还不太了解,请先读上一篇

cocos2dx-lua 热更新基础详解_ellis1970的博客-CSDN博客

先介绍下热更新准备工作产出的版本控制文件,分为 版本号文件versionCheck.json(控制是否热更)和md5文件versionAsset.json(控制更新内容)

 

在开发热更新的过程中,首先要做的不是lua编码,而是生成下载目录和版本文件,本文介绍操作步骤和提供脚本代码

1.在src同级目录下创建create_version.bat

@echo off
rd /s/q serverHot
mkdir serverHot
mkdir serverHot\src
mkdir serverHot\res

start /wait cocos luacompile -s %~dp0\src -d %~dp0\serverHot\src --disable-compile
start /wait cocos luacompile -s %~dp0\res -d %~dp0\serverHot\res --disable-compile

python D:\projectDir\create_version.py
pause

2.在src同级目录下创建create_version.py

# -*- coding: UTF-8 -*-
import shutil
import os
import re
import platform
import subprocess
import zipfile
import hashlib
import json

projectDir = "D:/yourProjectPath" #src和res所在目录
ignoreDir = ["Default"]

num = 0
versionfileCheck = "versionCheck.json"
versionfileAsset = "versionAsset.json"
luaFiles = []
info1 = {}
info1["GameVersion"] = "100.1000"

info2 = {}
info2["assets"] = {}

def joinDir(root, dirs):
	root = os.path.join(root, dirs)	#把目录和文件名合成一个路径
	return root

def copyres(path, luaRoot):
	modulename = path[len(luaRoot) + 1 : len(path)]	#modulename:source文件相对目录
	outroot = luaRoot + "\\serverHot\\" +modulename	#outroot:dest文件全路径
	num = outroot.rfind("\\")
	outrootdir = outroot[0:num + 1]	#outrootdir:dest文件所在全路径目录
	print(modulename +" /// " + outroot +" /// "+ outrootdir)
	if not os.path.exists(outrootdir):
		os.makedirs(outrootdir)
	if path.endswith(".lua") or path.endswith("versionAsset.json") or path.endswith("versionCheck.json") or path.endswith("LuaDebugjit.lua"):
		print("********* not copy:" + path)
	else:
		print("copying " + path)
		shutil.copyfile(path, outroot)
	return ""

def listDir(d):
	global luaFiles
	for item in os.listdir(d): # os.listDir:返回path指定的文件夹包含的文件或文件夹的名字的列表
		nDir = joinDir(d, item)
		if os.path.isfile(nDir):
			luaFiles.append(nDir)
		else:
			listDir(nDir)

def packageScript(projectDir):
	global luaFiles
	luaRoot = joinDir(projectDir, "src")	#取src全路径
	luaRoot2 = joinDir(projectDir, "res")	#取res全路径
	print(luaRoot)
	print(luaRoot2)
	listDir(luaRoot)						#取src文件列表
	listDir(luaRoot2)						#取res文件列表
	for item in luaFiles:
	 	zfile = copyres(item, projectDir)	#item为文件全路径

def getMD5(root):
	global num
	files = os.listdir(root)
	for f in files:
		itemPath = joinDir(root, f)
		if os.path.isdir(itemPath):
			if (f[0] == '.' or (f in ignoreDir)):
				pass
			else:
				getMD5(itemPath)
		elif os.path.isfile(itemPath):
			if f[0] != '.' and f != versionfileCheck and f != versionfileAsset:
				fp = open(itemPath, 'rb')
				m5 = hashlib.md5()
				m5.update(fp.read())
				fp.close()
				name = itemPath[(len(projectDir + "\\serverHot") + 1):]
				if os.sep == '\\':
					name = re.sub('\\\\','/',name)
				aMd5 = m5.hexdigest()
				aSize = os.path.getsize(itemPath)
				info2['assets'][name]=[aMd5, aSize]
				print("getMD5====>" + itemPath + " md5: " + m5.hexdigest())
				num = num + 1

packageScript(projectDir)					#遍历src和res文件夹,除了lua文件的其他文件复制到serverHot中
getMD5(projectDir + "\\serverHot")			#遍历serverHot里面的src和res文件夹,生成md5码,放到全局变量info2中

jsonStr1 = json.dumps(info1)
fp = open(joinDir(projectDir + "\\serverHot\\res", versionfileCheck), "wb")
fp.write(jsonStr1)
print("========= versionCheck.json complete =========")
jsonStr2 = json.dumps(info2)
fp = open(joinDir(projectDir + "\\serverHot\\res", versionfileAsset), "wb")
fp.write(jsonStr2)
print("========= versionAsset.json complete =========")

fp.close()
print("========= end =========")

3.操作步骤:双击create_version.bat,在弹出的cmd执行好之后关闭,在中止批处理操作对话中输入n,重复2次等待python执行完成

等待脚本执行完成,注意需要保证文件的名字和路径没有中文名,不然会报错

4.生成结果介绍

 

将服务器执行程序放到serverHot下

生成的版控文件在res下

 5.确定本地版本文件和下载目录

5.1 将serverhot/res下的versionCheck.json和versionAsset.json放到你自己项目的res下,作为项目的本地版控文件

5.2 改动你项目src和res里面的内容后当做新的版本,再重复步骤1-3,生成服务器的下载目录和版本文件

5.3 操作完成后,将服务器版本号改为"100.1001"后,运行服务器启动程序NetBox2.exe(也可以使用其他的,读者可自行选择)。

到这里你的准备工作已经完成,待完成Lua代码开发后(请见下一篇),就可以做热更新测试了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ellis1970

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值