本文类型:投稿
作者:七梦
为什么我说 微信小程序 还不是很完善.
了解小程序怎么实现的.
了解小程序有哪些功能和api
关于ReactNative
关于JSPatch
优缺点
我们先了解一下微信小程序在微信app中到底是怎么实现的:
由于没有微信的内测邀请,也就没有办法直接放到机子上面跑一下.如果能跑一下就可以直接判断是不是原生的还是依然是H5页面了,目前就按照腾讯对外宣称的是native吧.
native的小程序又是怎么实现的呢?我能想到的就只有两个(如果还有其他猜想,欢迎讨论.)
1. 微信小程序就是个类似ReactNative 的轮子
2. 通过JavaScriptCore.framework ,做一个类似JSPatch的功能.基于js方法回调native的东西.
我们做一个实验
要想知道是不是类似ReactNative,通过比对微信app所有历史版本的二进制包文件头,有没有哪个包突然多了非常多的自定义控件,如果有,就可以肯定微信其实就是类似ReactNative的轮子.
开始进行下载微信历史版本,通过砸壳,然后在通过class-dump,可以获取到微信各个版本app的头文件.然后分析头文件.
有一个致命问题是没有越狱机. 由于没有越狱机无法进行砸壳.只能想其他路径
在PP助手中找到了微信的越狱包,不行,获取到的安装包,估计是没有经过砸壳的,应该只是经过改签名生成的,无法获取到微信的头文件.
然后直接在Git上面找微信的headers.但是只找到了微信6.3.2的headers . 现在是6.3.31,跟我们的目标版本差距太远.网上找了很久都没有找到最新的.
退而求其次.通过抓包工具,修改itunes 的请求下载所有微信的版本.先分析一下包文件,看能不能获取到可用的信息.
我获取到微信的部分历史版本.由于我是从苹果官方下载下来的,都是苹果加密过的,没有越狱机,无法自行砸壳.那就比对一下包文件吧.这里我下载了11个版本
版本 |
包大小 | 上架时间 |
微信 6.3.19.ipa |
110.4M | 6.6 |
微信 6.3.21.ipa |
110.5M | 6.20 |
微信 6.3.22.ipa |
111.1M |
6.27 |
微信 6.3.23.ipa |
114M |
8.1 |
微信 6.3.24.ipa |
114.1M |
8.29 |
微信 6.3.25.ipa |
114.6M |
9.5 |
微信 6.3.27.ipa |
118.7M |
9.22 |
微信 6.3.28.ipa |
124.1M |
10.25 |
微信 6.3.29.ipa |
124.1M |
10.29 |
微信 6.3.30.ipa |
124.7M |
11.3 |
微信 6.3.31.ipa |
124.8M |
11.17 |
总的看来:发现在版本27跟版本28中.内容相差了6M多. 版本说明里面则基本相同的.通过这两个的文件对比,差距的信息也都在二进制包里面,猜想也许是在6.3.28开始或者更早之前就已经有微信小程序的功能支持的吧.但是微信内测号有事再9月1号发的.不清楚提供内测邀请号是不是需要单独的客户端.如果需要为了兼容历史版本,微信应该会提早做这方面的部署才对.然后通过补丁的方式完成,除非老流氓的必须强制升级
至于第二个猜想JavaScriptCore.framework.由于没有内测号跟二进制文件,也无法进行很好的判断说明.只是目前为止只是想到这两个功能可能进行原生的开发.
其中腾讯在去年底推出一个jsPatch热补丁.我也测试过通过jspatch完全可以实现一些小程序的功能开发,之所以没有在app中普遍使用,是因为出现苹果不让审核通过的情况.这里面还不清楚如果微信上线了小程序,苹果是否让通过的疑问.
如果是使用JavaScriptCore.framework 然后做一套JS的布局,然后进行解析,然后抛出一些制定好的api,这也是完全可以实现的.
低频的小程序的.对现在的手机也不会有非常大的负担.但是由于JavaScriptCore权限实在是太大.如果没有控制好.则将可以任意更改微信的原本功能了.
再来看一下有多少 微信小程序api
网络
媒体
图片
录音
音频播放控制
音乐播放控制
文件
视频
音频组件控制
视频组件控制
数据
数据缓存
位置
获取位置
查看位置
设备
网络状态
系统信息
重力感应
螺盘
拨打电话
界面
交互反馈
设置导航条
导航
动画
绘图
其他:里面两个方法 收起键盘, 停止当前页面刷新
开放接口 : 这里应该是微信提供的开发接口
登录
签名加密
用户信息
微信支付
模板消息
使用说明
接口说明
微信小程序.目前主要提供的api就是上面这些.不是很多.很快就可以看完
不过用来制作非常简单的小程序.基本够用.但是如果想要做精细起来,这里面可能就有点强人所难了.
比如想要非常精细的滚动条滚动的手指移动,手指离开,手指离开之后的滑动,手指移开之后滑动的停止
在比如app中的消息推送这里就没有办法实现了.
我觉得现在微信小程序提供的api还是非常有限,应该还只适合做非常简单的小程序,不过因为微信用户实在是太多了,可以做一个用来引流的小程序,倒是不错的考虑。
关于ReactNative
关于ReactNative,网上资料现在也算蛮多的了.是facebook花了好几年才推出的.
非常粗略的说:就是在重新中定义了方法a,b,c,d. 并且有一套桥接映射的方式, 然后需要用的时候,直接就是js调用A,B,C,D .然后通过桥接映射到a,b,c,d.
关于JSPatch
JSPatch,通俗一点讲:利用是动态语言通过JavaScriptCore.framework. 在使用方法的时候.会判断runtime.运行的方法,如果是后台下发的直接hook方法调用后台下发的js文件的方法.
因为JavaScriptCore,权限很大,所以如果腾讯用的是类似的方法,就需要自己做一套api,然后抛出来给开发者使用,要不然其他开发者可以任意使用的话,微信肯定会被玩坏的.
总结
以上只是针对iOS的,Android的之后会去了解.
微信公众号,微信小程序.有点类似谷歌chrome的书签跟扩展插件(百度之前也有出现过插件,但并没有起到什么效果).所以我一直觉得微信小程序就像个插件.这里只想说果然很腾讯.
因为微信用户量的基数,不难看出会进一步的巩固腾讯的围墙,也是个让企业获取用户的契机.
优点
可以不用安装,减少手机的内存,全部都放在微信里面
减少开发成本写一套代码,一统了android跟iOS
缺点
估计只能在微信上使用.
提供的api太少,想做精细,有点强人所难.
就目前来看,微信小程序还在进行公测,我也试着搭建了一下项目,微信小程序的开发工具还是很人性的.没有内测邀请号,不知道真机测试怎么样.然后还要考虑一下苹果的这方面的态度,会不会允许在自己眼皮底下出现一个商店.虽然现在还只是测试阶段,架不住微信用户的人多,不得不看,不管出什么东西.只要不要忘记学习就可以了.
合久必分分久必合,Android,H5和iOS的开发,最终如果不是像塞班般坠落,肯定会有一种语言出现一统.之后再分再和.
以上是我自己的猜想也大多都无法进行验证,
不过
没完,将会持续跟进微信小程序.
欢迎感谢指点!
更新:
小程序已经开放注册(需要公司或组织,个人不能注册) https://mp.weixin.qq.com/wxopen/waregister?action=step1