Unity安卓项目更新(下载安装包并进行安装方式)
项目上要做更新,还没学热更新,要做到游戏内部下载安装包并进行安装的效果,项目不采用Url转跳默认下载器的方式。
Url转跳下载方式
Application.OpenURL(URL);
用这个转跳你的Nginx下载路径就行了,项目上不让用这种方式
Unity内下载安装包
应用调用安卓,安装包位置下在Application.persistentDataPath目录下,下完之后,直接unity调用安卓方法安装此目录下的安装包
/// <summary> /// 分段,断点下载文件 /// </summary> IEnumerator BreakpointResume(string loadPath, string savePath) { //UnityWebRequest 经配置可传输 HTTP HEAD 请求的 UnityWebRequest。 UnityWebRequest headRequest = UnityWebRequest.Head(loadPath); //开始与远程服务器通信。 yield return headRequest.SendWebRequest(); if (!string.IsNullOrEmpty(headRequest.error)) { Debug.LogError("获取不到资源文件"); yield break; } //获取文件总大小 ulong totalLength = ulong.Parse(headRequest.GetResponseHeader("Content-Length")); Debug.Log("获取大小" + totalLength); headRequest.Dispose(); UnityWebRequest Request = UnityWebRequest.Get(loadPath); //append设置为true文件写入方式为接续写入,不覆盖原文件。 Request.downloadHandler = new DownloadHandlerFile(savePath, true); //创建文件 FileInfo file = new FileInfo(savePath); //当前下载的文件长度 ulong fileLength = (ulong)file.Length; //请求网络数据从第fileLength到最后的字节; Request.SetRequestHeader("Range", "bytes=" + fileLength + "-"); if (!string.IsNullOrEmpty(Request.error)) { Debug.LogError("下载失败" + Request.error); } if (fileLength < totalLength) { Request.SendWebRequest(); while (!Request.isDone) { double progress = (Request.downloadedBytes + fileLength) / (double)totalLength; _Pub_Sliders[0].value = (float)progress; // 获取下载进度显示为滑动条 _Pub_Txts[3].text = "存储路径:" + Application.persistentDataPath + "/" + Constants.URL_PROJECT_UPDATA_APK_NAME; // 显示存放路径//超过一定的字节关闭现在的协程,开启新的协程,将资源分段下载 if (Request.downloadedBytes >= _pri_LoadedBytes) { StopCoroutine("BreakpointResume"); //如果 UnityWebRequest 在进行中,就停止。 Request.Abort(); if (!string.IsNullOrEmpty(Request.error)) { Debug.LogError("下载失败" + Request.error); } yield return StartCoroutine(BreakpointResume(loadPath, savePath)); } yield return null; } if (Request.isDone) { Install.安装APK(Application.persistentDataPath + "/" + Constants.URL_PROJECT_UPDATA_APK_NAME); } } if (string.IsNullOrEmpty(Request.error)) { _Pub_Sliders[0].value = _Pub_Sliders[0].maxValue; // 获取下载进度显示为滑动条 _Pub_Txts[3].text = "存储路径:" + Application.persistentDataPath + "/" + Constants.URL_PROJECT_UPDATA_APK_NAME; // 显示存放路径 } Request.Dispose(); }
Unity调用安卓安装安装包
参考文章
unity调用安卓方法实现安装apk文件(androidx)_chunyu90225的博客-CSDN博客
记录
各种工具版本号
Android Studio:2022.2.1
AS Gradle Plugin Version:8.0.2
AS Gradle Version:8.0
Unity:2021.3.25f1c1
Unity Gradle:6.1.1
JDK:1.8
Unity配置基本按照2021.3.25默认设置
问题
- AndroidStudio里面Gradle版本、Gradle Plugin版本、Unity Gradle版本这几个对打包都有很大影响
- 在给mainTemplate.gradle加依赖的时候自己给两个依赖直接加了“,”结果是不需要的,导致了unity打包不了
这样就行了
本文作者:Nyanyan
本文链接:https://www.cnblogs.com/nyan/p/17554154.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步