应用版本迭代有时候我们不得不进行大版本升级,让玩家下载最新的包进行覆盖安装掉原来的包,覆盖安装这个动作是操作系统处理的,所以我们要遵循系统规则才能以正确的姿势覆盖掉之前的应用包,这里面有些需要注意的点

  1. 安卓的覆盖安装涉及到签名以及 versionCode 和 versionName,要正常覆盖安装需要满足以下条件:a.签名一致,即.keystore文件要用同一个。b.versionCode值要比之前的包大(versionCode是给机器看的,versionName虽然是给人看的,但一般值也都比之前包设定的大)
  2. 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热更新系列之 大版本更新应用覆盖安装问题相关推荐

  1. unity热更- 2 游戏大版本更新和热更新

    游戏上线后,遇见bug或者需要更新内容(包括资源,玩法,数值调整,游戏脚本等)的时候,一般有2种做法.第一种,发个新包,然后让玩家下载新的版本:第二种,在游戏内更新,游戏启动时去下载需要更新的资源.第 ...

  2. Unity热更新系列之一: bundle打包和打包策略

    资源对于手游来说其重要性是不言而喻的,bundle的打包策略最终影响的是资源的加载以及内存,所以要根据项目的实际情况去平衡你的bundle的粒度和大小.对于粒度,因为项目起初用的是Unity5.3.8 ...

  3. Unity热更新机制

    前言 游戏上线后,难免会有一些测试阶段没发现的bug,bug这东西,可大可小. 如果出现重大bug,而又没有热更技术,那么我们为了修复bug就只能强制玩家去商店下载新包,那造成的玩家流失是非常可怕的. ...

  4. [Unity热更新]04.卸载方式

    [Unity热更新]04.卸载方式 参考链接: https://www.jianshu.com/p/b37ee8cea04c 1.AssetBundle.Unload(false):释放AssetBu ...

  5. C# 实现 rtc_通过Xlua实现unity热更新的一个小例子

    通过Xlua实现unity热更新的一个小例子 一.介绍 ​ 热更新是指在更新游戏资源或者逻辑的时候不需要开发者将游戏再打包.发布.玩家重新下载安装包,而是可以通过将需要更新的资源打包成AssetBun ...

  6. unity案例 mysql lua_通过Xlua实现unity热更新的一个小例子

    通过Xlua实现unity热更新的一个小例子 一.介绍 ​ 热更新是指在更新游戏资源或者逻辑的时候不需要开发者将游戏再打包.发布.玩家重新下载安装包,而是可以通过将需要更新的资源打包成AssetBun ...

  7. Unity 热更新方案之——ILRuntime

    文章目录 前言 一.ILRuntime是什么? 二.ILRuntime使用 1.跨域委托 2.跨域继承 3.CLR绑定与重定向 前言 做游戏离不开热更新,目前市面上热更新方案用的比较多的是Lua(XL ...

  8. Unity热更新技术整理

    一.热更新学习介绍 1.什么是热更新 举例来说: 游戏上线后,玩家下载第一个版本(70M左右或者更大),在运营的过程中,如果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需要重新 ...

  9. Unity热更新方案探索与讨论

    热更新必要性 App Store审核周期长 应用更新频繁 更新版本对留存数据有很大影响 Lua相关 Lua:脚本,解释性语言 LuaJit:扩展高效版本,支持编译成二进制代码. Tolua++:C/C ...

最新文章

  1. php http_get_vars,$_GET($HTTP_GET_VARS)和$_POST($HTTP_POST_VARS)的区别
  2. firefox 中碰到的一个小坑
  3. 使用RedisDesktopManager客户端无法连接Redis服务器问题解决办法
  4. Python 爬虫实例(4)—— 爬取网易新闻
  5. Python基础教程:判断列表重复
  6. Docker部署项目的两种方式总结
  7. HDU 4990 Reading comprehension
  8. ASP.NET 2.0 Provider Toolkit
  9. Django模型(model)系统
  10. URLDecoder.decode url转码百分号问题
  11. dxp全称_Protel DXP 2004 分立元件库元件名称中英对照表
  12. WPF DataGrid的列标题样式设计
  13. 计算机ppt里怎么应用背景图,如何快速生成一个PPT图片背景“遮罩”?-ppt背景图片怎么设置...
  14. 蓝桥杯算法训练超全习题题解——ALGO-3.K好数**
  15. 企业支付宝转账到个人银行卡(免费率 无限额)JAVA配置示例
  16. 删除右键菜单中多余项
  17. ICE的Timer和TimerTask
  18. 化工集团公司安全风险智能化管控平台
  19. 【106】360查字体-查询本地字体版权是否可商用
  20. 医院his系统服务器需要配置,创智和宇 His医院系统单机(有备份数据库)配置...

热门文章

  1. 高考就算失败了又如何?
  2. seata不支持MySQL8.x正确解决方案
  3. 云端有个小卖铺--读后感
  4. uni-app微信小程序封装一个request请求接口
  5. 跑跑卡丁车好友服务器维护,《跑跑卡丁车》如何解除挚友关系 解除挚友关系方法...
  6. Ceres 库:基础使用,以手写高斯-牛顿法为例
  7. 基于缺陷的测试过程有效性评价方法研究
  8. 2021年亚太杯三等奖选手C题思路
  9. PHP绘制圣诞树 圣诞树(油画效果)
  10. AWS云平台系列介绍(一):AWS平台与EC2介绍