我花了5年时间开发一款APP

2024-08-23 19:48
文章标签 app 开发 时间 一款 我花

本文主要是介绍我花了5年时间开发一款APP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

软件名称:描生
下载渠道:官网(最新) 或 腾讯应用宝

我是来自辽宁的91年的油腻大叔,15年来到北京从事软件开发工作,由于工作的关系,平时总想着什么时候为自己也开发一款软件。16年及17年春冬那段时间每周末都会去爬香山,有一次在山顶翻照片时突然产生了一个想法:我每周都来爬香山,手机拍的照片自己都分不清是哪次拍的了,然后我再去了其它地方拍照片,一些没有明显标识的照片甚至都不知道是在哪里拍的了,我需要一款能为照片或视频记录时间、地点以及自定义标签的APP。我搜索了下市面上的APP都不太理想,那我何不自己开发一个这样的APP呢,即使别人用不上这个APP,我自己肯定是用的上的。

构思

既然是开发一款APP,我就需要好好构思下都应该有哪些功能。首先用户体系是必不可少的,然后需要发布内容,内容都有什么形式呢,常见的有文本、图片、音频、视频,那这些我就都要支持。然后还有地点和时间。关于时间,现在大部分APP发布内容都会记录发布时间,然而很多时候我们要发布的内容并不是当前时间的内容,比如是从朋友那里发来的前年拍的照片,再比如突然想起了过去的一件事情需要记录下来。所以时间这里我需要分别记录发布时间和发生时间。除此之外我还需要为发布的内容加上标签,比如我现在一直爬香山,之后我肯定会再爬别的山,我就可以加上标签“爬山”,之后按照“爬山”标签进行搜索,我什么时候爬过什么山拍了哪些照片和视频都会一目了然。
另外除了自己的回忆外,好多时候拍到美景还需要与大家分享,所以还要区分自己和所有人可见的权限。这个APP还应该记录历史事件以及新闻事件。还要根据其它人的反馈来增长热力值,从而形成一张热力图,使用户一进入到这个APP就知道现在大家的关注的焦点在哪里。

2017年3月7日

这是能追溯到的开工的第一天,我用“Gitee(码云)”创建了项目,由于自己使用php语言,后端选用了工作中熟悉的yii2框架。前端之前使用html5plus开发过苹果端的APP,所以这里还是继续使用这个语言。这个语言开发出来的APP能直接跨平台分别在安卓和苹果上运行,但由于不是原生语言,性能上有一些损失。
我当时并没有预计这个APP多久会开发完(也许当时知道会花5年的时间肯定会放弃的),也没去关心这个点,当时花了好长时间在前后端框架上,总想着使用最高级最优雅的方式去实现它。即使APP开发不成,我也算练手了。
然而进度比预想的慢很多,虽然每周末都会花时间去写,但是效率很低,其主要原因还是没有具体的规划,也没有设计原型,很多时间都是用来发呆思考。剩下的开发时间又更多的在研究框架,当学习到一个新的点,马上又回来修改已经写好的功能。

2017年中

我在北京东方时尚报名了驾照学习,由于平日还要上班,所以报的是假日班。我住的的地方离校区非常远,每次我要先坐50分钟的地铁去换乘班车,然后再坐一个小时才能到。这样每周末我9点就要出门到晚上8点才回来。
那段时间虽然在家就会开着电脑,但基本上整体进度都处于停滞不前的的状态。等到11月份的时候终于拿到了驾照。但在这期间,我在单位接触到了docker。这个新奇的事物深深的吸引了我,它号称是“构建一次,可在任何地方放运行”。然后接下来的几个月的时候里,我所有空闲时间都放在了docker上。我是想先用docker-compose创建一套lnmp环境:https://github.com/yinfuyuan/docker-lnmp,然后再用这套环境来继续开发我的APP。但就在我学习构建的过程中,我发先nginx和php都有基于alpine的版本,镜像文件特别小,就几十M,唯独mysql没有alpine版本,镜像文件要几百M。然后我就不自量力的要自己创建一个alpine版本的mysql:https://github.com/yinfuyuan/docker-mysql/tree/develop 和 mariadb:https://github.com/yinfuyuan/docker-mariadb/tree/develop 那几个月基本上每个周末都会不停的调试这两个库。我记得特别清楚的是冬天的时候特别冷,我老婆在旁边看手机,我就一直坐在电脑桌前裹着厚衣服在那调试。饿的时候就出去买两个鸡蛋灌饼。一天很快就过去了。
但到最后,这两个版本其实也是勉强能运行起来,有没有其他问题也没有办法去发现和解决。之后也没有再继续更新和维护这些项目。

2018年5月

由于工作的原因我开始接触大数据生态的相关组件,也仅仅是了解概念和用法。但是我一直想自己搭建一套测试环境用来测试和配置参数调优。于是我就又用docker创建一个项目:https://github.com/yinfuyuan/docker-bigdata 又开始不停的调试。这个项目持续了3个月后,终于意识到自己跑偏严重,于是开始重新把注意力放回APP开发上,APP开发了一段时间后当使用html接入了mapbox的热力图的demo后,发现卡顿严重,加上自己使用html做的界面实在自己都有点看不下去了,这让我对是否还有必要继续开发产生了怀疑。好在是在这期间因为工作的原因我重新学习了java(很早之前做过一段时间java),于是毅然决然的决定放弃htmlplus开发,开始自学安卓进行开发。

既然前端框架换了,那就干脆一步到位,后端的php框架也从yii2换成了laravel5.5,这个时候我还没用过laravel,只是想通过这个APP一边开发一边学习。由于两个框架之间用法差别较大,在yii2中花费几个月学到的高级特性一个都带不过来。这个阶段处于前后端完全重新开始写,而且前端语言框架和后端框架都是从0自学的状态。状态可想而之。

那段时间非常痛苦,不仅要不停的切换前后端的开发环境,更要不停的调整自己的状态,然而我那个时候的状态并不好,一个很小的对登录信息进行可逆加密的算法要写上整整一周。

但即使这样也没能坚持下去,尤其是已经花费了这么长时间还处于一个起始阶段,渐渐的开始利用休息时间玩会很久不玩的王者荣耀,随着时间一周周的流逝,每周在王者荣耀上花的时间也越来越多,最后到整个周末都用来玩游戏

后来又和朋友一起玩起了手游吃鸡,每天和各种好友四人组队,这个队还没打完,已经有很多好友发起了组队邀请。这种状态很容易使人沉浸。基本上工作日玩到12点多,然后周末两天整天都在玩。

后来又开始玩手游梦三国。。。

2019年8月

不知不觉过了1年多,这期间吸食的精神鸦片除了让身体感觉吃不消外,更多的还是愧疚,我老婆每次让我陪她出去走走,我都已在写程序为由冠冕堂皇的拒绝了,但实际时间都花费在玩游戏上。但此时距离我最开始的起点已过去近3年的时间,它开始让我变得焦虑起来,一方面是这么长时间的时间都浪费掉了而没有多陪陪家人,另一方面是这种状态还要一直持续并且看不到尽头。而在这期间很多短视频平台和vlog平台如雨后春笋般拔地而起。尤其是有一阵朋友圈里面疯传的某某足迹仅一个简单的功能便火遍朋友圈让我一夜未眠。

于是我又开始继续写我的APP,我在APP中用到了好多阿里云的产品,之前连测试带储备已经花了好几千了。正好当时负责的销售说数据库有活动,一年的三节点企业版的RDS原价1w+现在只要1.6k,我没有丝毫的犹豫就入手了,顺带着还买了redis等其他产品,当时心里想,一年的时间我早就开发出来,这么便宜买来先备着。然而时间再一次证明我太过年轻,从买来到失效,我只是登上去看了几眼。

在这期间我把larvel框架从5.5升级到了5.6、以及5.7、5.8、6.x、7.x,每次升级都是重新创建项目然后进行文件拷贝、修改、重新测试完整流程。这时我还在想上线之前怎么都不升级了,太浪费时间了,但在上线的前夕还是升级到了最新版本8.x。

在这期间不停的调整技术策略,将路由规则改为restful又改回来,安装mongodb几个月后又换成elasticsearch到最后elasticsearch也下掉,将文件上传接入了阿里云的oss后又将全部功能下掉改为阿里云的视频点播,安卓端已经接入调试好的音视频播放器也下掉替换为阿里云的视频点播播放器。安卓端媒体选择只有图片和视频,然后就自己花时间更改开源库使其支持音频选择。安卓的浮动菜单效果与自己的需求有偏差然后又自己修改开源库等等等等。
这只是我能想起的一些事情,类似的事情有很多,由于又都是新知识,其中每个点都花费很长时间才解决。有的耗费一两周,有的耗费一两个月。

在这期间,总也因为laravel的返回错误码的方式没有java的优雅,在javaweb中,大多使用枚举来定义错误码,但是php中却没有这么好用的东西,于是。。。老毛病又犯了,花了几个月的时间自己写了个枚举库:https://github.com/yinfuyuan/php-enum

2020年9月

我决定收拾心情,重新出发,然而刚开始没写多久,就又不知道什么原因突发奇想要先写一个节假日查询的接口:http://www.apihubs.cn 好在这个接口只花费两个月的时候。在此之后,我重新规划了哪些东西这次必须要有,哪些东西可以后上线。然后就开始全身心投入到APP的开发中,这一年的时候基本上所有工作日的下班时间和周末都花费在上面,很多时候都是熬夜到两三点才睡,然后第二天晚上困的不行,又9点多睡凌晨4点起来接着写。随着有效时间的投入,产品也渐渐初具模型。

2021年9月

时间又过了一年,到现在虽然还有很多不完善的东西,但我正式提交上线了,目前腾讯应用宝已成功上线: https://a.app.qq.com/o/simple.jsp?pkgname=com.wisemorn.miaosheng&channel=0002160650432d595942其他的功能等后面再迭代吧。经历这5年的时间虽然我只开发出这么一个功能相对简单的APP,但是这段时间的经历我应该永远不会忘记。也算一场对心的磨练吧。然而APP上线无论对我还是对APP来说这才刚刚开始,未来的路还有很长。

写在最后

值得欣慰的是在上线后我又回想了下当初写这个APP的缘由,发现当初的想法还是实现了的,现在我已经开始把自己之前拍摄的照片和视频都在往自己的APP上发布。
其实从一个路人视角来看很容易看出来,在这个APP开发的过程中走了太多弯路,我在开发的过程中心态也发生了很大的变化。

另外,如果你有推广资源并愿意帮忙推广我将不胜感激。我也可以在我能力允许的范围内给予一定报酬,联系我:http://www.miaoshengs.com/#/about

这篇关于我花了5年时间开发一款APP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100338

相关文章

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

如何利用Java获取当天的开始和结束时间

《如何利用Java获取当天的开始和结束时间》:本文主要介绍如何使用Java8的LocalDate和LocalDateTime类获取指定日期的开始和结束时间,展示了如何通过这些类进行日期和时间的处... 目录前言1. Java日期时间API概述2. 获取当天的开始和结束时间代码解析运行结果3. 总结前言在J

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

对postgresql日期和时间的比较

《对postgresql日期和时间的比较》文章介绍了在数据库中处理日期和时间类型时的一些注意事项,包括如何将字符串转换为日期或时间类型,以及在比较时自动转换的情况,作者建议在使用数据库时,根据具体情况... 目录PostgreSQL日期和时间比较DB里保存到时分秒,需要和年月日比较db里存储date或者ti

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j