Unity热更新系列之 大版本更新应用覆盖安装问题
应用版本迭代有时候我们不得不进行大版本升级,让玩家下载最新的包进行覆盖安装掉原来的包,覆盖安装这个动作是操作系统处理的,所以我们要遵循系统规则才能以正确的姿势覆盖掉之前的应用包,这里面有些需要注意的点
- 安卓的覆盖安装涉及到签名以及 versionCode 和 versionName,要正常覆盖安装需要满足以下条件:a.签名一致,即.keystore文件要用同一个。b.versionCode值要比之前的包大(versionCode是给机器看的,versionName虽然是给人看的,但一般值也都比之前包设定的大)
- Unity覆盖安装时Application.persistentDataPath目录并不会被删除,这个目录不仅存放Unity的缓存数据,还存放我们的更新资源,所以覆盖安装的时候为了避免读取到旧包更新下来的资源,我从两方面去规避:
private const string APPLICATION_RESDIR_KEY = "ApplicationResDirKey"; IEnumerator CheckSecondInstall() {if (!Application.isMobilePlatform){yield break;}yield return new WaitForEndOfFrame();string localResDir = PlayerPrefs.GetString(APPLICATION_RESDIR_KEY, string.Empty);if (string.IsNullOrEmpty(localResDir)){PlayerPrefs.SetString(APPLICATION_RESDIR_KEY, Util.DataPath); //记录新版本目录PlayerPrefs.Save();}else{string curResDir = Util.DataPath;if (!localResDir.Equals(curResDir)){if (!string.IsNullOrEmpty(localResDir) && Directory.Exists(localResDir)){Directory.Delete(localResDir, true); //删除旧资源存放目录}PlayerPrefs.SetString(APPLICATION_RESDIR_KEY, curResDir);PlayerPrefs.Save();}} }//Util.DataPath /// <summary> /// 数据存放目录 /// </summary> public static string DataPath {get {string game = AppConst.AppName.ToLower();game = game + Application.version; //目录名关联版本if (Application.isMobilePlatform) {return string.Format("{0}/{1}/", Application.persistentDataPath, game);}if (AppConst.DebugMode) {return string.Format("{0}/{1}/", Application.dataPath, AppConst.AssetDir);}if (Application.platform == RuntimePlatform.OSXEditor) {int i = Application.dataPath.LastIndexOf('/');return Application.dataPath.Substring(0, i + 1) + game + "/";}return "c:/" + game + "/";} }
程序启动的时候去调用协程函数CheckSecondInstall(),这里面删除了旧的更新资源存放目录并记录新的资源存放目录Util.DataPath。Util.DataPath关联了打包时的版本亦可避免去旧的更新资源目录去读取资源。
Unity热更新系列之 大版本更新应用覆盖安装问题相关推荐
- unity热更- 2 游戏大版本更新和热更新
游戏上线后,遇见bug或者需要更新内容(包括资源,玩法,数值调整,游戏脚本等)的时候,一般有2种做法.第一种,发个新包,然后让玩家下载新的版本:第二种,在游戏内更新,游戏启动时去下载需要更新的资源.第 ...
- Unity热更新系列之一: bundle打包和打包策略
资源对于手游来说其重要性是不言而喻的,bundle的打包策略最终影响的是资源的加载以及内存,所以要根据项目的实际情况去平衡你的bundle的粒度和大小.对于粒度,因为项目起初用的是Unity5.3.8 ...
- Unity热更新机制
前言 游戏上线后,难免会有一些测试阶段没发现的bug,bug这东西,可大可小. 如果出现重大bug,而又没有热更技术,那么我们为了修复bug就只能强制玩家去商店下载新包,那造成的玩家流失是非常可怕的. ...
- [Unity热更新]04.卸载方式
[Unity热更新]04.卸载方式 参考链接: https://www.jianshu.com/p/b37ee8cea04c 1.AssetBundle.Unload(false):释放AssetBu ...
- C# 实现 rtc_通过Xlua实现unity热更新的一个小例子
通过Xlua实现unity热更新的一个小例子 一.介绍 热更新是指在更新游戏资源或者逻辑的时候不需要开发者将游戏再打包.发布.玩家重新下载安装包,而是可以通过将需要更新的资源打包成AssetBun ...
- unity案例 mysql lua_通过Xlua实现unity热更新的一个小例子
通过Xlua实现unity热更新的一个小例子 一.介绍 热更新是指在更新游戏资源或者逻辑的时候不需要开发者将游戏再打包.发布.玩家重新下载安装包,而是可以通过将需要更新的资源打包成AssetBun ...
- Unity 热更新方案之——ILRuntime
文章目录 前言 一.ILRuntime是什么? 二.ILRuntime使用 1.跨域委托 2.跨域继承 3.CLR绑定与重定向 前言 做游戏离不开热更新,目前市面上热更新方案用的比较多的是Lua(XL ...
- Unity热更新技术整理
一.热更新学习介绍 1.什么是热更新 举例来说: 游戏上线后,玩家下载第一个版本(70M左右或者更大),在运营的过程中,如果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需要重新 ...
- Unity热更新方案探索与讨论
热更新必要性 App Store审核周期长 应用更新频繁 更新版本对留存数据有很大影响 Lua相关 Lua:脚本,解释性语言 LuaJit:扩展高效版本,支持编译成二进制代码. Tolua++:C/C ...
最新文章
- 在目前大数据时代下,怎么能成为一名合格的数据分析师
- ExtJS入门教程03,form中怎能没有validation
- Android 12正式发布:安卓历史最大设计变化、更流畅了!
- java 注释 超链接_java_Java代码注释规范详解,代码附有注释对程序开发者来 - phpStudy...
- 【小松教你手游开发】【面试必读(编程基础)】堆和栈的区别(转过无数次的文章)...
- Android实现EditText禁止输入换行符但可以根据内容自动换行的解决方法
- oracle中select*的性能与全部字段查询 哪个性能好一点_性能优化技巧:TopN
- 摩拜开锁系统是用什么服务器,摩拜昨晨现“开锁难” 市民:系统需更稳定
- 教育网系统服务器域名地址,教育网宽带dns服务器IP地址(2021年更新)
- java对接微信公众号
- Scrum板与Kanban如何抉择?ecusiqoiw板与按照eqymgy
- php查拼音,php 输入汉字,查出对应的拼音
- 使用C语言求一元二次方程的解
- 计算机汉字的输入方法有哪些,《计算机汉字输入方法.ppt
- 看完你就明白的锁系列之自旋锁
- 全息投影是计算机技术吗,3D全息投影技术怎么应用在展厅的?
- python决策树画图_python输出决策树图形的例子
- idea evaluation license has expired 解决办法
- 网罗软件测试知识体系汇总
- 几张表格怎么联动_如何实现多张excel表格数据联动-Excel 如何实现多级下拉菜单的联动...