{"repo":"noodle1983/UnityAndroidIl2cppPatchDemo","free":true,"listed":false,"github":"https://github.com/noodle1983/UnityAndroidIl2cppPatchDemo","clone":"git clone https://github.com/noodle1983/UnityAndroidIl2cppPatchDemo.git","description":"这是Unity Android APP il2cpp热更完美解决方案的Demo。更新build_demo_apk里的Unity路径，执行即可一键重build Patch和apk。因为文件libunity是没有热更的，如unity版本有变化则热更不适用。","language":"C#","stars":580,"topics":["unity","android","patch","il2cpp"],"license":null,"category":"mobile-apps","readme_excerpt":"1. 简介 这是Unity Android APP il2cpp热更完美解决方案的Demo（Git地址）的说明。 和现有的热更解决方案不同的是，他不会引入多余的语言（只是UnityScript，c#...），对Unity程序设计和编码没有任何限制。你可以在预置和场景里的GameObject上添加任何的Compnents组件，需要序列化的和不需要序列化的，他们都是可以热更的，也不需要做额外的标记处理。简而言之，在此方案下，Unity的所有资源和脚本，都是可以热更的。 本文接下来将介绍如何去制作热更文件和如何应用这些热更文件。为了简化Demo的设计，Demo包含的热更文件会事先以全量更新的方式制作好，一起打到了Apk里面。具体到项目中热更文件得放服务器，正式上线得放CDN，以增量更新的方式捣鼓出和文中一样的目录结构就OK了。 Demo代码适用Unity2018-？，2017需要自己看版本历史回退Zip库。 2. 方案总览 Unity在以il2cpp方式导出Android工程（或者Apk文件）的时候，代码会被编译成libil2cpp，而相关的资源、配置和序列化数据会以他们各自的格式导出到android的assets目录（assets/bin/Data）。这两部分，libil2cpp和assets目录，必须匹配（即需要在同一次打包中提取，可能有的变了，有的没变，增量方式只提取变化的部分）才能正常工作，不然Unity会在启动时崩溃。本方案就是热更这两部分。 热更的正式流程如下图. 流程说明： 步骤1，在Unity的逻辑之前，libbootstrap会检查本地是否有Patch. Apk安装后，没应用过任何热更，本地是不会有Patch文件的，走no流程。如果热更过，则会有Patch目录，走yes流程。如果是覆盖安装，会检查apk和Patch文件的修改时间，走no流程。Patch目录如何准备，后面会将到。 步骤2，加载Patch目录对应架构（arm/x86）的libil2cpp库，并应用assets目录的更新文件。 步骤3，开始Unity的流程，进入Unity第一个场景，并执行相关的Unity Script，一般是C#，我们都以C#举例。 步骤4，检查服务端是否有新的patch，这步demo没有演示，需要自己实现。 步骤5，下载新的patch，这步demo也没有演示，需要自己实现 步骤6，根据规则准备patch目录，详细规则会在后面描述。在Demo中只是将全量更新包解压，全量更新包打包的时候目录结构就是对的，所以不需要做其他的处理。 步骤7，调用libbootstrap的接口设置patch目录，因为libil2cpp已经加载进进程，所以需要重启APP，从新的patch目录加载patch。这步Demo中有设置patch目录的例子。 步骤8，重启APP，Demo提供了纯C#代码。 步骤9，没有新的Patch，就正常进入游戏了。 流程里更详细的描述和如何生成Patch文件，见第三章。 3. Demo详述 3.1. Demo目录结构 工程所有文件均置于AndroidIl2cppPatchDemo目录下。各文件目录说明如下表。 名字 说明 -------- ----- Editor/AndroidBuilder.cs 这个文件包含所有从导出Android工程，到输出Patch和生成Apk安装文件的代码。 Editor/Exe/zip.exe zip压缩工具，用来将asset/bin/Data下的文件压缩成标准zip格式。 Plugin/ 包含libbootstrap库. ","default_branch":null,"files":null,"tree":[],"storefront":"/r/noodle1983","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/noodle1983/UnityAndroidIl2cppPatchDemo/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}