移动开发特别是游戏开发领域,可热更新基本是标配。我们的项目是采用Unity同时是采用第三方插件绑定c#与lua实现可热更新。一段时间以来都是先在unity IDE开发完毕功能,之后再到手机上进行真机测试。由于真机环境毕竟与IDE环境有一定差别,所以真机上测试时有时出现一些不好查找的问题。当遇到这样的问题时候之前唯一的测试方式就是加入输出日志,打个版本,运行,测试。在修改下输出日志,打个版本,运行测试。就这样反反复复都快肝硬化了。这样下去不妥,于是自己就试着思考能否优化这里面的一些环节,提升测试效率。
既然已经实现lua热更新,那基于lua可以动态编译运行的特性,我想在真机运行的时候是可以替换具体某个的lua文件的并运行新的脚本。基于这样的出发点我列出了一下几个关键技术点。
1.本地编辑器与手机端通信,实现手机端可获得变化的文件内容
2.手机端替换变化lua文件并运行
3.本地编辑器需要能够监听文件变化。
4.手机端将日志同步到本地并在编辑器输出。
基于以上几点点我得到了第一版解的决方案。
本地编辑器选用 Sublime Text3 这个工具轻便灵活,同时便于扩展。通过它用python编写插件实现本地编辑与手机客户端通信,本地文件变化监听,输出手机端的日志。通信方式采用采用http(采用这个方式的初衷是与伙伴能快速出原型)为不与具体项目耦合所以该功能基于插件开发思想使其独立具体的项目。具体架构如下图一:
图中有三大模块:manager_debug_service(调试账号管理系统),sublime-plugin (文本编辑插件), client-application(真机客户端控制部分)
manager_debug_service:目的是管理注册账号便于其他开发者使用,这里每当开启一个调试端都会注册一个账号和服务端连接地址 。当手机测试的手可输入账号去这个系统获得调试编辑服务器地址。然后手机客户端 client-application 直接连接 sublime-plugin 进行调试。
在开发的时候还是觉得这套系统还是有不方便的地方。比如会配置一个调试账号管理系统。这个系统对客户端来说有些不方便。manager_debug_service系统是否可以去掉?基于这样的考虑就有了第二版本的方案
调整方案:
1.去掉manager_debug_service系统。
2.将服务端 从sublime-plugin移动到client-application
3.通信方式采用socket
4.sublime-plugin 用户连接要测试的手机端
基于上面几点第二版架构如下图二:
这样第二版就比第一版简单许多只有client-application 系统和sublime-plugin系统
client-application :有debug 部分和 application logic 部分,如果独立具体项目实际只有debug部分,application logic 部分只是实现 debug部分的提供用于调试的 interface-debug接口。
基于这套系统的思想可以做很一些扩展延伸比如:断点调试系统,自动测试系统,手机实时开发系统等等。