是不是有时候有些好的点子觉得蛮有市场的,想用APP来实现,然后去验证一下市场的反应,但是要么苦于自己不会做APP,要么苦于要学习各种语言,然后好的点子就被搁置了,成功永远与你无缘,身为一名程序员,怎么可能被这些事情拦住呢?

现在APP一般都是分为安卓、IOS两种平台,做安卓开发需要用到java,做ios开发需要用到OC、swift,我们不可能都去把这些语言学习一遍,虽说语言大同小异。因此最好能有一种跨平台的方案,一门语言打通这两个平台,这样既提高了产品的维护性,也节约了时间,最好这个平台能够利用我现有的语言,不要再去学习一门新的语言,毕竟我们的主要关注点不是在做APP,而是将一些好的想法去付诸实现,从而投放市场。

技术选型

我之前也没有做过APP,在网上大概翻了一下,目前比较流行跨平台方案有两种:

  • react-native
  • flutter

最后我是选择了react-native,原因如下:

  1. 用js来开发APP
    react-native是用js来开发APP,这就意味着我可以用clojurescript来编写APP了,以另一种更优雅地语言来快速地实现创意;而flutter使用的是另一个dart语言,说实话看到了写的那段代码以后真的是忍不住想要吐槽,太丑了,跟cljs相比真的是无法忍受。

  2. 社区维护积极
    react native发展的时间比flutter长,相对而言更加成熟一点,而且目前Facebook目前也在加大投入,现在基本是处于一个react-native跟flutter博弈的阶段

  3. google的历史
    flutter是google出品的,目前flutter是比较火的,但是Google有过抛弃过技术的先例,不排除还会重蹈覆辙,持观望态度

  4. 性能
    这应该是很多人关心的,react-native中间毕竟多了一层js桥接,性能肯定会有损耗,但是从我的角度来看,这不是什么大问题:

    • 对于前期要快速构建产品然后用市场来验证的点子,性能上不算大问题,而且react-native的性能也不至于差到哪里去
    • facebook一直在努力优化性能,最近发布了全新JS引擎Hermes,根据目前的数据显示性能提升了一大截
    • 真的需要关注性能的时候说明你的产品得到了市场的认可,肯定是有了不错的收入,这时候可以考虑找人用原生的重写,一个人是肯定搞不定所有事情的,想都别想

最主要的还是可以用clojurescript + react-native来制作APP,利用这种方式,我们基本上就只需要会cljs就可以了,不需要学习那么多的语言。

为什么要用cljs来写APP呢?个人原因吧,比较喜欢lisp,而cljs是lisp的方言的一种,语法特别简单,基本半小时之内就可以上手了;此外,一般APP都需要服务端,跟后端进行通信,APP我们可以用clojurescript来完成,后端的话我们可以用clojure来完成,再配上一个后台管理系统,这就齐活了,基本就是一个语言可以实现所有的功能。

教程

这个教程是我自己学习开发的APP的整体过程,无可避免地会有错误,仅供大家一起学习参考使用。

整个系列我会从0开始来开发网易云音乐,目前网易云音乐做得还是挺不错的,网上用这个来练手的大有人在。

本系列教程是一个递增式的,因此我写的时候是用的01、02之类的来表示这是第几篇,同时我在git下面建立了increments目录,里面用来存放每一篇教程开始的时候的代码,这样阅读第几篇的时候就可以根据对应的目录同步开始了。

更新历史

2019-10-13

  • 初稿