使用云函数判断代码包是小程序还是小游戏包。
时常会碰到读者朋友来咨询问题,小程序方面的居多,偶尔也会有小游戏方面的,所以前一段时间基于云函数做了一个检测工具方便去判断小程序包的基础信息,因为小游戏与小程序在架构上差异不大所以工具自然也可以去检测小游戏了。
下面一起来看看这个云函数工具怎么做。
# 如何判定是小程序包
根据官方文档 所述,一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下:
文件 | 必需 | 作用 |
---|---|---|
app.js | 是 | 小程序逻辑 |
app.json | 是 | 小程序公共配置 |
app.wxss | 否 | 小程序公共样式表 |
这个信息仅作参考,因为在实际的打包之后是无法在包内容找到 app.json 及 app.wxss 的。
在项目目录中,以下文件会经过编译,因此上传之后无法直接访问到:.js、app.json、.wxml、*.wxss(其中 wxml 和 wxss 文件仅针对在 app.json 中配置了的页面)。
具体我们可以看官方的这篇文档微信开发者工具小结 ,文章提到通过编译过程我们将 WXML 文件和 WXSS 文件都处理成 JS 代码,使用 script 标签注入在一个空的 html 文件中(我们称为:page-frame.html);我们将所有的 JS 文件编译成一个单独的 app-service.js。所以这里我们可以通过判断是否存在 page-frame 相关文件去辨别是否是小程序包了。
判别的关键点就是以下几个文件:
- page-frame.html
- app-service.js
- app-config.js(小程序全局配置)
# 如何判定是小游戏包
如果你看过小游戏官方文档的话,应该可以知道,小游戏的架构是和小程序一致的,小游戏注册的时候与小程序的入口一样,只是服务类目是游戏。
对于开发者工具来说小游戏只有两个必要文件:
- game.js(小游戏入口文件)
- game.json (配置文件)
小游戏中,只能使用 JavaScript 来编写小游戏,所以没有其它那些 wxml、wxss 的繁琐编译过程。
小游戏环境没有 BOM 和 DOM API,这个和小程序是一致的,毕竟是在同一个运行环境里面跑的。
小游戏根目录下的 game.json 文件用来对小游戏进行配置。文件内容为一个 JSON 对象,有一些属性。不过因为这些属性都是非必填的,所以这里就不再一一列举了。
在小游戏项目目录中,以下文件会经过编译,因此上传之后无法直接访问到:
- *.js、game.json。
那么如何判断它是小游戏包呢? 方法也是有的。
小游戏的入口文件名称 game.js
在包中是没有变化的,所以可以直接通过判断文件列表中是否包含 game.js
。
另外小游戏与小程序的全局配置虽然都打包到了 app-config.js
里面,但是配置内容是略有差别的,我们可以通过读取它来辅助判断。
比如一些小游戏特有的属性:
- deviceOrientation
- gamePlugins
- openDataContext
这样子准确率会有所提高。
小游戏反编译其实参考价值不是特别大,我们需要的是还原工程,所以如果你有兴趣可以看看如何还原工程。
工具目前支持 2D 项目,不管是 2.3 还是 2.4,不管什么平台,只要没怎么加密,就能拿到包来反编译工程。
# 云函数体验地址
地址:http://tcb.xuedingmiao.com/mp 目前版本的云函数已经可以支持分辨小程序、小游戏、分包了。