框架列表

之前的框架概述我们大概描述了登录模块的职责,今天我们在深入讨论一遍 ,今天主要学习下应用的更新:扩展包下载,热更

概述链接:

1.建立网络连接,如果没有网络弹出提示框,否则跳转到步骤2

unity判断网络连接:Application.internetReachability,返回值定义:
NetworkReachability.NotReachable:网络不可用
NetworkReachability.ReachableViaCarrierDataNetwork:运营商数据网络可用、
NetworkReachability.ReachableViaLocalAreaNetwork:wifi或有线网络是可用的

2.扩展包更新。android端需要先检查扩展包是否需要更新,如果要更新,检查内存是否足够,内存不足弹出提示框,否则跳转步骤3

在下载扩展包前记得判断下硬盘空间是否足够

android获取可用磁盘空间如下,也可以参考博客:,里面说的更详细

static long GetSpace(File path) {
    StatFs stat = new StatFs(path.getPath());
    long blockSize = stat.getBlockSize();
    long totalBlocks = stat.getAvailableBlocks();
    return totalBlocks * blockSize;
}

ios端获取可用磁盘空间可以参考博客:

3.解压扩展包。如果要解压,检查内存是否足够,内存不足弹出提示框,否则跳转4

  我们当前的项目压缩策略采用的是:扩展包使用lzma压缩,ab包使用lz4压缩,为了减少热更包下载体积,热更包会把所有的ab包在打包一层lzma压缩,lz4的ab包unity可以直接读取,所以这边的解压指的是解压lzma的包

  lzma压缩、解压缩可以下载liblzma的库,也可以使用7zip插件进行解压缩

4.热更。

  (1)获取服务端版本号文件,如果需要强更,跳转到应用商店,如果需要更新,跳转下一步,否则跳转步骤5

    跳转应用商店直接用Application.OpenURL接口打开商店链接就好了

  (2)获取服务端md5文件,对比本地md5,获取需要更新的ab包列表

    md5文件:文件的MD5值是独一无二的,只有文件发生改变了MD5值才会改变,当热更的时候我们需要知道那些AssetBundle发生了改变,就需要用到这个md5文件,下面是md5的生成:

static string CalcMd5StringFromHash(byte[] bytes)
	{
		string ret = "";
		foreach (byte b in bytes) {
			ret += Convert.ToString (b, 16);
		}		return ret;
	}	public static string GetFileMd5 (string path)
	{
		if (!File.Exists (path)) {
			return "";
		}		FileStream stream = File.OpenRead (path);
		MD5 md5 = new MD5CryptoServiceProvider ();
		byte[] result = md5.ComputeHash (stream);
		stream.Close ();		return CalcMd5StringFromHash (result);
	}

  (3)下载并解压需要更新的ab包,这边需要检查内存是否足够,内存不足弹出提示框

    unity AssetBundle有三种压缩模式,第一种是不压缩,这种压缩方式包体最大,但下载完成后的加载速度也是最快的,第二种是lzma压缩,也是默认的压缩格式,这种压缩格式压缩率最高,包体最小,但是加载速度最慢,因为要加载整包,第三种是lz4,包体大小和加载速度都还可以(推荐方式),后面资源管理会详细解说AssetBundle的打包方式

unity app覆盖安装 unity安装模块_unity app覆盖安装

  

m_request = UnityWebRequest.Get(m_strUrl);
		if (!string.IsNullOrEmpty (m_strPath)) {
			  // 是写到文件的情况开启断点续传
			  m_downloadHandler = new DownloaderHandler(m_strPath, OnProgress, OnCompleted);			  m_request.chunkedTransfer = true;
			  m_request.disposeDownloadHandlerOnDispose = true;
			  m_request.SetRequestHeader("Range", "bytes=" + m_downloadHandler.DownedLength + "-");
			  m_request.downloadHandler = m_downloadHandler;
		}		m_request.Send();

5.更新结束。登录sdk如腾讯账号,获取账号状态,如封号,弹出提示,否则跳转步骤6

这块会在后面SDKModule模块详细解说

6.登录游戏服务器(简称游服),获取游戏状态,如在维护状态,弹出提示,否则跳转步骤7

这块会在网络模块解说

7.新手引导(顺序跟步骤8可以对换。看情况)

8.预加载资源(可无,看情况),预加载结束跳转步骤9

9.请求服务端初始化数据(如main场景要显示内容需要的数据、小红点等),初始数据都接收完毕跳转步骤10

10.切换到mian场景,打开主界面

 

详细的流程如下图:

unity app覆盖安装 unity安装模块_扩展包_02

 

一直想把之前工作、学习时记录的文档整理到博客上,一方面温故而知新,一方面和大家一起学习 -程序小白