zoukankan      html  css  js  c++  java
  • CocosCreator 原生 热更新(demo源码)

    版本:2.4.2

    参考:

    cocos教程:热更新范例教程

    cocos教程:热更新管理器

    csdn:Cocos Creator 热更新(动态修改热更地址)

    demo下载:

    hotUpdateDemo

    这里用cocos2.4.2版本,从零实现android热更新,从1.0.0版本热更到2.0.0版本的demo操作流程。从而了解热更新的基本环境搭建和原理。

    一 看官方教程

    首先浏览下官方的教程热更新范例教程热更新管理器。知道热更新大概的原理流程。

    更新流程大致如下:

    1. 基于原生打包目录中的 assets 和 src 目录生成本地 Manifest 文件。
    2. 创建一个热更新组件来负责热更新逻辑。
    3. 游戏发布后,若需要更新版本,则生成一套远程版本资源,包含 assets 目录、src 目录和 Manifest 文件,将远程版本部署到服务端。
    4. 当热更新组件检测到服务端 Manifest 版本不一致时,就会开始热更新

    本地资源和远程资源文档结构如下:

    assets和src:代码和图片等资源

    project.manifest:版本配置文件

    version.manifest:project.manifest的一部分,因为project.manifest保存了资源配置导致过大,每次加载影响体验,所以抽离了远程资源地址和版本号到version.manifest中,以方便快速加载比对版本。

    project.manifiest文件:

    二 从零新建项目,实现android热更新

    1.  搭建原生开发环境,新建空项目,并构建-编译-运行android。

     参考:cocos原生开发环境配置

    2. 下载官网Demo

    下载地址:https://github.com/cocos-creator/tutorial-hot-update

    下载下来就有了疑问,demo是什么年代的版本,都几年几个月没更新了,要配置什么环境怎么样才能跑起来,要用到当下新版本里要怎么修改,api过时了怎么办,跑起来各种报错怎么整。

    所以demo我就不跑了,新建一个项目跑。

    3. 复制热更新插件

    复制demo里的packages到新项目中相同位置。packages里是热更新插件,会在构建项目时,在main.js里插入一段热更新相关代码。

    4. 本地搭建远程资源目录

    在新项目中创建remote-assets文件夹,用于存放远程版本资源。

    安装python2.7.5+版本,我用的是2.7.13,在新项目中创建一个python_server.bat文件

    文件内容如下:

    python -m SimpleHTTPServer 8000

    双击bat,相当于以新项目为根目录搭建了一个简易服务器。

    浏览器输入如下,则相当于访问新项目远程资源remote-assets文件夹 (192.168.0.60替换成你电脑本地IP)

    http://192.168.0.60:8000/remote-assets/
    

    5. 复制并修改热更新组件

    从demo中找到HotUpdate.js,cocos提供的是js的,里面是热更新UI和逻辑的代码,我新项目用的是ts,显然不行。

    所以要把demo的HotUpdate.js的代码复制到新项目的HotUpdate.ts里,并做相应的修改。

    修改1:

    demo里的版本文件ManifestStr是直接写死在HotUpdate.js里,这肯定是不行的。

    修改将customManifestStr值从版本文件manifest获取

    修改2:

    cc.loader已经过时,将两处使用cc.loader转换md5的地方都注释掉。

    修改3:

    将demo里用到的组件UI和变量都重新写过,新项目用的UI丑点无所谓,组件重命名了也没关系,反正只要和官方demo的匹配上就行。

    另外的修改可以参考新项目源码,把HotUpdate.ts组件挂到新项目场景组件上,这样新项目加载场景后就可以执行热更新了。

    6. 复制版本生成器

    复制version_generator.js到新项目中相同位置,这个版本生成文件会生成当前版本的project.manifest和version.manifest配置文件。

    新项目中新建热更新.bat文件,这个用于执行version_generator.js。

     

    热更新.bat内容如下:

    @ECHO OFF
    @node version_generator.js -v 1.0.0 -u http://192.168.0.60:8000/remote-assets/ -s build/jsb-link/ -d assets/
    pause

    参数说明:

    • -v 指定 Manifest 文件的主版本号。
    • -u 指定服务器远程包的地址,这个地址需要和最初发布版本中 Manifest 文件的远程包地址一致,否则无法检测到更新。
    • -s 本地原生打包版本的目录相对路径。
    • -d 保存 Manifest 文件的地址。

    总结下新项目现在都做了什么:

    1. 新建项目,并能够正常构建-编译-运行,在真机上可以跑起来这个空项目。

    2. 下载官方热更新demo

    3. 复制了热更新插件package

    4. 本地搭建了远程版本资源目录remote-assets

    5. 热更新组件HotUpdate.js改成了ts

    6. 复制了版本生成器version_generator.js

    做完以上的操作,基本环境就准备好了。

    三  版本从1.0.0热更新到2.0.0

    大致操作流程如下:

    1. 构建2.0.0项目

    2. 将2.0.0项目资源和版本配置放到远程资源文件夹remote-assets

    3. 构建1.0.0项目

    4. 运行1.0.0项目,热更新到2.0.0

    1. 构建项目

    不要勾选md5 Cache,这是得到2.0.0版本

    2.执行热更新.bat

    将热更新.bat的-v修改成2.0.0,双击执行一次。这是根据当前2.0.0项目,生成了2.0.0版本文件project.manifest和version.manifest。

    3. 再次构建项目

    这是将上一步新生成的project.manifest和version.manifest打包进去

    将assets下project.manifest赋值给HotUpdate.ts热更组件的ManifestUrl

    将assets下project.manifest和version.manifest复制到remote-assets下

     将build/js-link下assets和src文件夹复制到remote-assets下

    4. 修改场景,构建项目

    这是构建1.0.0版本项目,任意修改项目场景,比如增加一个图片,增加一个label文本等,能看出来和2.0.0不一样。

    5. 执行热更新.bat

    将热更新.bat的-v修改成1.0.0,双击执行一次,这是根据项目生成1.0.0版本的project.manifest和version.manifest

    6. 构建项目

    这是将新生成的1.0.0版本文件project.manifest和version.manifest打包进去

    7. androd studio 真机运行项目(也可以cocos模拟器先跑跑)

    真机运行时,是1.0.0版本

    点击检查更新,提示有新版本

    点击立即更新,则更新到2.0.0版本

    四  Demo下载和使用

    demo:下载地址

    版本:2.4.2

    1. 在搭建好原生开发环境下,打开demo,构建-编译。

    2. 用android studio打开构建编译后原生项目,hotUpdatedemouildjsb-linkframeworks untime-srcproj.android-studio, 等待android studio编译完成。

    3. 执行python_server.bat

    4. 编辑热更新.bat的-v为2.0.0,ip为本机地址,修改完后构建一次项目,将hotUpdatedemoassets下project.manifest和version.manifest复制到根目录hotUpdatedemo emote-assets下

        将build/jsb-link下assets和src文件夹复制到remote-assets下

    5. 修改项目场景任意地方,编辑热更新.bat的-v为1.0.0,构建一次项目

    6. 连上手机,android studio点绿色三角运行项目,则可以手机上运行demo。

    再次运行项目时,需要删除手机上apk,这样才能删除原apk的版本文件缓存。

  • 相关阅读:
    printcap
    browser-ua
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode70 爬楼梯
  • 原文地址:https://www.cnblogs.com/gamedaybyday/p/13588169.html
Copyright © 2011-2022 走看看