转载

谈谈对微信小程序的看法

本文类型:投稿

作者:七梦

为什么我说 微信小程序 还不是很完善.

  1. 了解小程序怎么实现的.

  2. 了解小程序有哪些功能和api

  3. 关于ReactNative

  4. 关于JSPatch

  5. 优缺点

我们先了解一下微信小程序在微信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

原文  http://www.cocoachina.com/industry/20161205/18275.html
正文到此结束
Loading...