解决:Unity : Error while downloading Asset Bundle: Couldn‘t move cache data 问题

目录

问题:

尝试

问题得到解决

我的解释


问题:


         最近游戏要上线,发现一个现象,部分机型在启动的时候闪退或者黑屏,概率是5%左右,通过Bugly只有个别机型才有这个现象,其实真实情况比这严重的多,bugly有时候并不能捕捉到这种情况,我们各种怀疑和查找,最终发现问题的根源。

问题日志如下:

2-18 15:04:10.924 28696 30223 E Unity : Unable to open archive file for writing: '/storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Temp/0b2da51ac602117b08efce711b40391f/__data'
12-18 15:04:10.924 28696 30144 E Unity : Error while downloading Asset Bundle: Failed to decompress data for the AssetBundle 'jar:file:///data/app/~~mqBnkrTVeHx0R5PQj6Zlhw==/com.xfp.hnsz.ks.xwdxy.cs-ujHBQxE6h_IEHhAMfYKUNA==/base.apk!/assets/assets-art-atlas-achievement.spriteatlasv2_assets_all_fb282f19f9eb9a06452ff40988043469.bundle'.
12-18 15:04:10.927 28696 30148 E Unity : Unable to move cache file '/storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Temp/1678b268885c708b6b23968c60116b1a' to '/storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Shared/c145b22e3c49b6b6064231a90d5e684c/48c0472eecd6b114bfc238bd99e509c4': error code - 1
12-18 15:04:10.927 28696 30148 E Unity : Error while downloading Asset Bundle: Couldn't move cache data '/storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Temp/1678b268885c708b6b23968c60116b1a' into place '/storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Shared/c145b22e3c49b6b6064231a90d5e684c/48c0472eecd6b114bfc238bd99e509c4' when caching AssetBundle 'jar:file:///data/app/~~mqBnkrTVeHx0R5PQj6Zlhw==/com.xfp.hnsz.ks.xwdxy.cs-ujHBQxE6h_IEHhAMfYKUNA==/base.apk!/assets/icon_fr_eye.png_48c0472eecd6b114bfc238bd99e509c4.bundle'.
12-18 15:04:10.927 28696 30149 E Unity : Unable to move cache file '/storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Temp/eda9c7b7cbb31ddf2be58ac700e478d6' to '/storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Shared/c64d4e8d8e84733e1a9638e93f484830/1627a372980ad47ae64c100b39449f60': error code - 1
12-18 15:04:10.927 28696 30149 E Unity : Error while downloading Asset Bundle: Couldn't move cache data '/storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Temp/eda9c7b7cbb31ddf2be58ac700e478d6' into place '/storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Shared/c64d4e8d8e84733e1a9638e93f484830/1627a372980ad47ae64c100b39449f60' when caching AssetBundle 'jar:file:///data/app/~~mqBnkrTVeHx0R5PQj6Zlhw==/com.xfp.hnsz.ks.xwdxy.cs-ujHBQxE6h_IEHhAMfYKUNA==/base.apk!/assets/icon_mca_up.png_1627a372980ad47ae64c100b39449f60.bundle'.
12-18 15:04:11.222 28696 30025 E Unity : UnityWebRequestException: Data Processing Error, see Download Handler error
12-18 15:04:11.222 28696 30025 E Unity : at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x00000] in <00000000000000000000000000000000>:0
12-18 15:04:11.222 28696 30025 E Unity : at Cysharp.Threading.Tasks.UnityAsyncExtensions+UnityWebRequestAsyncOperationConfiguredSource.GetResult (System.Int16 token) [0x00000] in <00000000000000000000000000000000>:0

 通过日志我们发现,在unityActivity一启动的时候,我们就启动下载更新文件(也就是在awake函数中调用UnityWebRequest函数将StreamingAssets的初始包的assetbundle拷贝到可写的沙盒目录下),小概率爆出如上问题。       

尝试

        我们怀疑是unity的storage的存储权限问题,所以我们将安装目录放到 external(SDCard)扩展卡中,默认情况是internal(沙盒目录):

        

并在导出android工程的清单文件(AndroidManifest.xml)下开扩展卡权限:

        READ_EXTERNAL_STORAGE(读取外部存储器 )

        WRITE_EXTERNAL_STORAGE(写外部存储器

但是由于发行方说,游戏已启动就申请扩展卡的存储权限,不合规;也不利于用户安装和导量的转化,最终我们将该办法摒弃掉了。

问题得到解决

从头再来,最终我们在官网发现Caching.ready

using System.Collections;
using UnityEngine;
using UnityEngine.Networking;public class Example : MonoBehaviour
{IEnumerator IsCachingReadyExample(string uri){//Using this conditional says we want to wait for our Caching system to be ready before trying to download bundleswhile (!Caching.ready){yield return null;}//Download the bundleUnityWebRequest request = UnityWebRequest.GetAssetBundle(uri);yield return request.SendWebRequest();AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);//Do something with the AssetBundle...}
}

当我们在UnityWebRequest我们的assetbundle之前加上Caching.ready这句的时候,最终问题得到解决。

        其实日志已经告诉我们,在写文件的时候无法将文件写入到缓存中。由于unity对于cache的机制以及什么时候cache.ready准备好了并没有写的很清楚(或许官方写了,我并没有找到出处)

我的解释

        对于cache,unity应该unityActivity一启动的时候需要申请cache,但一定是异步或者在awake之后,而我们的下载更新就在awake第一行就启动下载并是异步的操纵,这时cache有一定概率并没有初始化完成。所有造成有一定概率爆出以上错误的原因。

        如果小伙伴找到cache的详细文档以及cache.ready=true的时机,请告知我,不胜感激!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/608979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【精选】小白 windows操作系统 使用教程(超详细)

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步…

leetcode2807.在链表中插入最大公约数

文章目录 题目解题方法复杂度Code Problem: 2807. 在链表中插入最大公约数 题目 给你一个链表的头 head &#xff0c;每个结点包含一个整数值。 在相邻结点之间&#xff0c;请你插入一个新的结点&#xff0c;结点值为这两个相邻结点值的 最大公约数 。 请你返回插入之后的链表。…

SQLAlchemy 中的会话(Session)缓存详解

SQLAlchemy 的会话缓存&#xff08;Session Cache&#xff09;是 ORM 框架的核心特性之一&#xff0c;对于理解和高效使用 SQLAlchemy 至关重要。这个缓存机制主要作用在会话&#xff08;Session&#xff09;层面&#xff0c;提供了对数据库交互的中间缓存层。以下是对 SQLAlch…

apache2的虚拟主机的配置

APACHE2的虚拟主机配置 本章中心概括&#xff1a; 虚拟web主机的初步认识&#xff0c;在redhat系列系统中如何配置&#xff0c;在Debian系列系统中如何配置。 什么是apache2虚拟主机&#xff1a; 简单点讲&#xff0c;就是在同一个物理机中配置多个虚拟主机&#xff0c;从而达…

池化层解析:简单易懂理解 PyTorch 中的核心组件

目录 torch.nn详解 nn.MaxPool1d nn.MaxPool2d nn.MaxPool3d nn.MaxUnpool1d nn.MaxUnpool2d nn.MaxUnpool3d nn.AvgPool1d nn.AvgPool2d nn.AvgPool3d nn.FractionalMaxPool2d nn.FractionalMaxPool3d nn.LPPool1d nn.LPPool2d nn.AdaptiveMaxPool1d nn.Adapt…

git打tag以及拉取tag

场景&#xff1a;某次git代码发布后定版记录&#xff0c;将发版所在的commit时候代码打上tag记录&#xff0c;方便后期切换到对应tag代码位置。 查看所有tag名 git tag// 1.1.0 // 1.0.0查看tag和描述 git tag -l -n//1.0.0 云监管一期项目完结 //1.1.0 …

transformer进行文本分析的模型代码

这段代码定义了一个使用Transformer架构的PyTorch神经网络模型。Transformer模型是一种基于注意力机制的神经网络架构&#xff0c;最初由Vaswani等人在论文“Attention is All You Need”中提出。它在自然语言处理任务中被广泛应用&#xff0c;例如机器翻译。 让我们逐步解释这…

练习-指针笔试题

目录 前言一、一维整型数组1.1 题目一1.2 题目二 二、二维整型数组2.1 题目一2.2 题目二2.3 题目三 三、结构体3.1 题目一&#xff08;32位机器运行&#xff09; 四、字符数组4.1 题目一4.2 题目二 总结 前言 本篇文章记录关于C语言指针笔试题的介绍。 一、一维整型数组 1.1 …

【GoLang入门教程】Go语言几种标准库介绍(五)

如何解决大模型的「幻觉」问题&#xff1f; 文章目录 如何解决大模型的「幻觉」问题&#xff1f;前言几种库image库 (常见图形格式的访问及生成)关键概念和类型&#xff1a;示例 IO库示例 math库(数学库)常用的函数和常量&#xff1a;示例 总结专栏集锦写在最后 前言 上一篇&a…

Spring Redis Client使用Hessian序列化HINCRBY命令的Bug

前言&#xff1a; 公司自己封装Redis Client架包&#xff0c;使用Hessian协议对Redis中Value值进行序列化。在使用Hash结构的HINCRBY命令&#xff0c;处理序列化异常的问题。下面&#xff0c;我将详细说明一下。 正文&#xff1a; 公司封装Redis Client架包&#xff0c;其实就…

开源大数据集群部署(三)集群mysql数据库部署

开源大数据集群部署&#xff08;一&#xff09;集群实施规划 开源大数据集群部署&#xff08;二&#xff09;集群基础环境实施准备 作者&#xff1a;櫰木 本文将介绍mysql部署&#xff0c;其中在hd1.dtstack.com主机root权限下安装配置 1 解压文件 解压名为mysql-8.0.31-lin…

Spring MVC(day1)

什么是MVC MVC是一种设计模式&#xff0c;将软件按照模型、视图、控制器来划分&#xff1a; M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为数据承载Bean&#xff1a;专门存储业务数据…

我在工作一年时怎么都看不懂的编程写法。今天手把手教给你

作为一名程序员&#xff0c;你一定遇到或亲自写过这样的代码。有人将它形象的形容为shi山&#xff0c;或者被戏称为“面向保就业编程”。 以下面这个代码为例&#xff0c;其中的问题也显而易见&#xff0c;当越来越多的条件判断时&#xff0c;代码会变得非常臃肿&#xff0c;难…

使用Pipeline和ColumnTransformer提升机器学习代码质量

机器学习项目中最冗长的步骤通常是数据清洗和预处理&#xff0c;Scikit-learn库中的Pipeline和 and ColumnTransformer通过一次封装替代逐步运行transformation步骤&#xff0c;从而减少冗余代码量。 1. Pipeline vs. ColumnTransformer 训练模型前&#xff0c;需要将数据集分…

目标检测数据集大全「包含VOC+COCO+YOLO三种格式+划分脚本+训练脚本」(持续原地更新)

一、作者介绍&#xff1a;五年算法开发经验、AI 算法经理、阿里云开发社区专家博主、稀土掘金人工智能内容评审委员会成员。擅长&#xff1a;检测、分割、理解、AIGC 等算法训练与部署。 二、数据集介绍&#xff1a; 质量高&#xff1a;高质量图片、高质量标注数据&#xff0c;…

9.建造者模式

文章目录 一、介绍二、代码三、实际使用总结 一、介绍 建造者模式旨在将一个复杂对象的构建过程和其表示分离&#xff0c;以便同样的构建过程可以创建不同的表示。这种模式适用于构建对象的算法&#xff08;构建过程&#xff09;应该独立于对象的组成部分以及它们的装配方式的…

SpringMVC SpringMVC 的入门

2.1.环境搭建 2.1.1.创建工程 2.1.2.添加web支持 右键项目选择Add framework support... 如果没有&#xff0c;可以参考idea2023版如何新建web项目 2.添加web支持 ​ 3.效果 ​ 注意&#xff1a; 不要先添加打包方式将web目录要拖拽到main目录下&#xff0c;并改名为…

LeetCode 2707. 字符串中的额外字符

一、题目 1、题目描述 给你一个下标从 0 开始的字符串 s 和一个单词字典 dictionary 。你需要将 s 分割成若干个 互不重叠 的子字符串&#xff0c;每个子字符串都在 dictionary 中出现过。s 中可能会有一些 额外的字符 不在任何子字符串中。 请你采取最优策略分割 s &#xff…

金和OA C6 HomeService.asmx SQL注入漏洞复现

0x01 产品简介 金和网络是专业信息化服务商,为城市监管部门提供了互联网+监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 0x02 漏洞概述 金和OA C6 HomeService.asmx接口处存在SQL注入漏洞,攻击者除了可以利用 SQL 注入漏洞…

个人笔记:分布式大数据技术原理(一)Hadoop 框架

大家想了解更多大数据相关内容请移驾我的课堂&#xff1a; 大数据相关课程 剖析及实践企业级大数据 数据架构规划设计 大厂架构师知识梳理&#xff1a;剖析及实践数据建模 剖析及实践数据资产运营平台 Apache Hadoop 软件库是一个框架&#xff0c;它允许使用简单的编程模型&…