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的版本文件缓存。

  • 相关阅读:
    web前端攻城狮都来晒一晒你的收藏夹吧
    淘宝前端技术系列课程分享
    HTML5编程实战之二:用动画的形式切换图片
    HTML5编程实战之一:HTML5时钟
    【转】chrome developer tool 调试技巧
    Android 云端推送C2DM php实现向终端推送消息
    简单的泰国IP判断
    [翻译]延迟着色(Shawn Hargreaves)〔1〕
    [翻译]延迟着色(2)
    [3D基础]投影矩阵的推导(1)
  • 原文地址:https://www.cnblogs.com/gamedaybyday/p/13588169.html
Copyright © 2011-2022 走看看