热更新版本检测与更新机制

## 热更新版本检测与更新机制

#### 1 AB简介

assetsbundle  

#### 2 版本检测原理

第一步  打包准备

 每次打包,要对应生成一个配置文件,assetslist.txt 

记录打包的时间,

打包实际情况:在公司里,

专门打包PC。(打包速度很慢,需要高配的机器,cpu和内存。)

SVN,Git,更新到最新版本。然后执行我们框架的打包功能。

assetslist.txt 

###### **第一行 是打包的时间(开发机的本地时间  北京时间)**

这个打包时间,我们用毫秒数,实际就是我们的大版本号。

1  每次打包版本号不能相同

2  版本是递增的

3  版本号要有一定的隐蔽性。   1001  1002  1003   IP 

1123 .123.1515

**第二行 开始  是我们所有打包资源的描述**

ab包名,md5信息,资源包的size, 其他信息(level)

ab的倚赖问题:

ab包1里面有一个预制体 。 它上面引用了一张图片。

这张图片位于ab包2中。

只加载ab包1, 预制体上丢图。

先加载ab包1,再加载ab包2,  预制体继续丢图

由于ab包1依赖ab包2,所以必须先加载依赖包

先加载ab包2,再加载ab包1,才能够正常显示预制体上的图片。

资源管理器,它在使用一个ab里面的一个asset的时候,要根据依赖文件(unity引擎会生成),找到它依赖的所有的ab包,并先行加载。然后再加载自己。

按照功能模块划分资源,然后公共资源独立。

模块运行前,先加载公共资源。然后加载模块资源。

比如背包模块,不管图片,预制体,还是功能预制体,都在背包AB包里。所以不存在依赖问题。

在我们的框架里,不是一次全部加载读出。而是按需读出。

清理资源策略:

功能关闭,清理对应ab包。

功能关闭,延时清理ab包。倒计时N 秒。如果玩家再次时用到这个功能,则继续重置倒计时为N。

高级机制:结合业务

比如有个功能,10级之前,使用非常频繁,10级之后,不太使用,20级之后一天一次。

清理时候,加一个维度判断,等级。

N可以设置长一点。  N可以设置短一点, 20以后,N可以设置成0. 实时清理。

##### 更新检测原理:

客户端启动,

第一步,检测服务器上最新的assetslist的大版本号,和本地的assetslist的大版本号,

如果本地小于服务器,则开始第二步。

第二步:逐一的判断服务器当前版本的AB包的MD5信息与本地的对应AB包的MD5信息做比较。

如果相同,则不需要下载,如果不同,则添加到下载列表。

第三步,根据下载列表,开启下载。

#### 3 版本检测与更新重要知识点

1 persistentDataPath 目录 

​     允许开发者 读写这个目录。byte,形成资源文件。 ab包从资源服务器上下载后,写入这个目录

2  StreamingAssets 目录        apk包打出来。 同时还有ab包。

更新了一年了。  AB已经产生了500M. 

新玩家下载,进游戏就要下500M更新。

500M的AB包直接放到项目里(StreamingAssets),随着包打个新的渠道包。

www 方式读取出来,放到persistentDataPath,先解压出来。然后再去判断热更新。

​    只能读,不能写, 不加密的目录

3  Resoureces目录      不用热更新的资源,放到这里。

​    只能读,不能写, 加密的目录。 

打包一个APK。  demo.apk  你可以改后缀名为  demo.zip 解压开。

你去观察,如果你的文件放在StreamingAssets目录,解压后直接能看到。

AAA.png  

如果你的文件放在Resoureces目录,解压后是加密的。

4 资料服务器 。 

IP地址。 定位资源服务器在网络的位置。生产环境,不能直接使用IP

使用域名。

使用一个IP服务器,从IP服务器上获取资源服务器地址。

接入全国的CDN节点。

5 检测和下载AB包的执行流程

#### 4 学习建议

lua热更新

xlua  tolua  slua 搞熟

lua 语言的语法基础掌握。  元表   ,掌握如何用lua实现面向对象

搭建一个极简的热更新框架。

能否打ab包,

能够检测热更新,并下载ab包,(本节课内容)      

加载ab包,在游戏中使用,实现一个资源管理器,用编辑器开发和打包,是不同的。

接下来,学习如何架构一个热更新生产环境的开发框架

猜你喜欢

转载自blog.csdn.net/weixin_41995872/article/details/105321253