小米联系公司商务,希望能在小米的新应用上能够进行合作,然后也就有了这个项目

小米新应用-美柚

采用流行的前端开发模式,贴合主流前端开发者的思维习惯,同事大幅提升应用的性能,提供大量前端环境无法使用的系统能力,以及很多第三方服务的对接能力。这个相对于阿里的YunOS cloudApp 就好太多了,cloudApp虽然技术用的也是 js,但是开发思维习惯还是用的是android的,画个页面,你先得写个布局layout.json,写个动态样式在页面的 xml文件中搞不定,还得在页面的控制器里用 js去写各种样式。这也是为什么我们觉得小米新应用可以弄,虽然后来发现他的坑也不少。

从开发体验来说,小米的开发体验相对于阿里的YunOS还是不错的。开发环境有三个部分组成
platform: 一个运行在小米手机上的 apk,
tools: 类似 SDK, 具有命令行打包工具,可将新应用打包成 zip包,运行在 platform 上
demo: 具有一个简单的静态项目的示例 和一个组件接口调用示例。

环境搭建

环境搭建上,还是相对比较简单的。花了半天的时间,就能工程跑起来了。

但是频繁的更新还是挺繁琐的,得先下载SDK然后替换掉本地的,然后再升级你工程的SDK,下载最新的apk并安装替代你的手机,在运行你的新应用工程,部署到手机的platform(apk)上。理想状态是在本地工程通过在线安装直接升级项目依赖的SDK包,当然,现在处于内测并且是开发阶段,可以理解。

开发流程

先要命令行 npm run serve 起一个本地服务,手机安装platform,通过这个服务去跟新安装项目生产的zip包。
最开始的命令行运行npm run dev 生成zip包,再通过手机刷新获取,操作繁琐,修改了某个代码,想要看个效果平均需要1分钟的时间(因为有时候会出现更新失败)。

现在优化后,有自动监听代码变更,platform自动拉去更新后的zip包。网络状况正常的情况,一次更新需要5s左右时间。

但是你在连续两次保存时,容易出现

存在问题

  1. 不能可视化编程,开发成本非常高,开发效率低。例如我一个子模块是否100%填充了父容器,我得给父容器和自容器各自设置一个背景色。

  2. 不能代码调试。解决办法,只能打log来定位(成千上万行log))。当出了问题时,简单的展示页面勉强还可以排查,但如果设计的负责的业务时,比如在做经期相关逻辑运算时,逻辑分支众多,打log都不定能找到错误点。

  3. 代码检测功能很弱,很多时候的报错无法定位出错点,比如:有一次页面少了一个没有关闭,在进行点击日期选择组件的时候报了个诡异的错误,这边花了三个小时时间把代码翻了一遍也没找出结果。求助洪光,才知道少了个闭合。等等

  4. 沟通成本很大,跟小米那边技术人员洪光一对一对接,每次有问题,如果能解决,如果是我这边的问题,解决起来,一来一回要好几个小时,如果是他们的问题,他们还要发包更新版本提供支持,可能要隔天解决。

  5. 技术难点,由于目前小米那边是页面和页面间隔离的,不能进去不同页面间对对象的实例化操作。为了能出个1.0版,切换页面通过存读数据库来进行操作。所以可能,是切换页面性能很弱的原因。

以上是存在的比较大的问题,小米那边也在迭代开发中,还有各种各样的小问题,他们自己也是知道的。

暂时不建议投入经期2.0,原因有二

  1. 成果的不确定性,我不能保证能不能出成品,(1.0我也是周五下午3、4点确定能出东西,太刺激了)。不能调试,大小问题(都不懂是谁的问题)都得依赖小米开发人员。因为美柚app是个工具类app, 更多的是业务逻辑,计算太复杂了,代码没法跟踪。

  2. 时间的不确定性,因为得依赖小米那边,一来一回就是好几个小时过去,或者一天过去。我也不知道什么时候能做出来

1.0 做了哪些东西

  1. 计算显示用户经期,
  2. 设置经期长度,周期长度
  3. 显示用户记录数据
  4. 用户手机号快速登入,发短信,设置密码操作,
  5. 贴士列表、贴士详情,关于美柚等页面展示

1.0的坑

顺便说下1.0留的坑吧,时间比较赶,为了能出版本,我就自己决定了一些东西。

  1. 改变经期状态,更新的内容不会刷新到页面上,首页初始化默认了四条贴士,所以看起来跟写死的一样。

  2. 没有上传、下载服务端用户经期数据,周五早上才给接口,所以我也不确定有没有合并。

  3. 没有遮罩、没有加载动画等等细节都没有。

  4. 因为没有缓存,也不知道全局变量,每次操作都是通过存读数据库来交互的,所以代码逻辑改的很乱。

成果展示

从上手到开发,两个星期的时间赶出的成果;成果如下图: