前言
我是一个java程序员,同时喜欢古诗词,经常会写些古诗,安装并体验了一些相关app,不太满意,于是就萌生了自己开发一个的想法。到现在我自己完全独立开发的一款app,已经在各应用商店上线了(名字叫诗词宝典),中间遇到很多坎,这里分享并记录一下,希望可以给想开发app的同志一些参考,避免一些坑。总结一下大概步骤就是 设计->开发->部署打包->发布到应用商店
设计
设计阶段主要做的就是列举app的功能,规划出app的大致模样。
我当初设想的比如登录注册,浏览古诗词,写诗,看别人写到诗等。功能列举出来,然后就是画原型页面,使用了几款原型工具,国内的基本都要收费(破解不了),最后用的是axure,他可以直接打包成一个静态网站,用来做交互很方便,可以网上下载一些组件库,画出来的效果很好。大概用了一周时间,原型就画好了,接下来就是开发了。
开发
准备工作
上线app需要准备很多,我是磕磕绊绊搞了很久,现在总结一下
- 云服务器,我选用的是阿里云,需要实名认证过。我买的1核2g,我用的centos系统,一年两三百块钱
- 备案域名,在阿里云租服务器后,然后同样在阿里云购买域名,域名比较便宜,一年几十块钱。买好之后进行备案,备案需要实名认证,审核通过工信部会给你发短信,再次验证。
- 对象存储,租来的服务器磁盘只有40g,所有我选择把文件和接口服务分开来,一开始用的七牛,个人开发者认证后会有50g免费额度,超出费用也很低,后来又加了腾讯云的对象存储cos,cos有客户端,手机也可以上传文件,很方便。而且价格更低。这个的成本可以忽略,总共也没花几块钱。
- 短信,因为登录需要使用验证码,使用的是腾讯云短信,每个月有100条的免费额度,超出后大概4分钱一条,开通后申请好模版和签名。
- 邮箱,同样登录需要,使用的网易邮箱,然后开通smtp服务。
- 应用商店账号,安卓的主要小米,华为,应用宝,百度,阿里分发都开通一下。iso的需要开发者账号,每年99美元,因为我负担不起所有没有上线。
- 百度ai ,因为诗词宝典有一个文字转语音的功能,用的百度的,注册账号并认证。
- 软著,百度搜一下,有很多广告,随便找一个买就行,费用在300左右,需要30个工作日。加钱可以缩短时间,不急的话甚至可以自己去申请。
开发是耗时最长的,主要就是数据库,后端,前端,第三方服务对接,管理系统等。
后端开发
后台用springboot+mybaits+mysql进行架构,考虑到开始没有多少用户量,为减少开发成本,未使用缓存技术。先根据原型设计出数据库的表结构,自动生成一些代码,然后编写业务代码,用到的插件主要有
- jjwt 用来生成token,
- fastjson 阿里的json转换工具
- lombok 实体类免写get和set工具
- mybatis-plus 插件等
具体pom文件依赖如下
<!-- 百度语音-->
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.12.0</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--jjwt-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.56</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
</dependency>
<!--七牛-->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.22</version>
</dependency>
<!--邮件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--阿里-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.1.0</version>
</dependency>
<!--腾讯-->
<dependency>
<groupId>com.github.qcloudsms</groupId>
<artifactId>qcloudsms</artifactId>
<version>1.0.6</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--统一mapper-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.13</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
后面就是写接口了,接口开发和调试大概用了两周时间,在调试第三方api的时候耗时比较多。
前端开发
前端开发经历几个不同阶段,所采用的模式包括html加壳打包;安卓原生开发;flutter 跨平台开发;
-
第一版使用html+jquery的方式写的页面,使用hbuilder 开发工具配置打包就行了,虽然很丑,但基本功能有了,且用户体验很差。
-
第二版使用了vue+vantui 来编写前端页面,使用安卓webview加载本地文件然后打包,因为使用了ui框架,样式上好看一些,但是复杂页面比较卡顿,在此期间学习了一些vue和安卓的相关东西。
-
第三版,我直接抛弃加壳方式,使用安卓原生开发,但是画页面的难度比html繁琐数倍,而且难看,最终没有发布该版本;
-
第四版,因为flutter问世,我了解一下,组件齐全,拿来即用,而且是跨平台的,于是采用了flutter进行开发,加上学习不过一个月的时间就上线了。目前这是最好的方案了,成品我十分满意。
前端开发主要是画页面,对接口,比较耗时间,然后联调一些bug并解决掉。
- logo和启动图;自学了一些ps,设计了一个logo和启动图,和几张轮播图。也可以找专业的ui进行设计,费用不低(贫穷使我啥都要会一点)
管理系统
管理系统必不可少,不可能要加点数据就去直接操作数据库,很麻烦。
我使用vue+element ui来做,组件化使得管理系统开发得很快,有两个图表统计集成了echarts,管理系统就不细说,很简单。
数据采集
前后端开发完成之后,就需要往数据库里添数据了,因为古诗词都是公共版权,随便找几个比较规范的网站抓取数据,抓取数据使用jsoup,一个java爬虫工具,稍微懂html结构都会用,抓取下来的数据清洗完批量操作到表里就行。
部署打包
到这一步,诗词宝典已经能在局域网内运行了,如何部署到外网呢?
- 部署服务器,登录从阿里云租来的主机,安装docker ,nginx,mysql,并配置。使用docker跑一个tomcat镜像,将后台数据库改成线上环境,打一个war包,上传到webapps目录下,用到上传工具fileZilli。
- 域名解析,如果使用域名连接服务的话,需要进行解析,nginx配置一些域名跳转,端口映射就行。
- apk打包;不管是用安卓加壳还是flutter,都会build生成一个apk包,然后使用jdk的工具生成一个签名文件,一定要妥善保管key文件和他的密码。然后对apk包进行签名,如果要发布到应用宝,需要先去平台加固,然后再签名;
- ios 打包,需要使用mac电脑安装xcode,购买开发者账号才行。
弄完之后,安装包就是可以用的了。
发布到应用商店
不管是哪个平台的应用商店,都需要实名认证,上传安装包,填一下资料比如app截图,功能说明等。然后等待审核就行了,审核通过之后就会在应用商店里搜索到了。
各个应用商店开发平台地址:
- 小米:https://dev.mi.com/console/
- 华为:https://id1.cloud.huawei.com/CAS/portal/loginAuth.html
- 阿里:http://open.uc.cn/login
- 百度:https://app.baidu.com/
- 应用宝:https://wiki.open.qq.com/wiki/%E9%A6%96%E9%A1%B5
(oppo和vivo不接收个人开发者)
其他用到的网站:
阿里云:https://account.aliyun.com/login/login.htm
腾讯云:https://cloud.tencent.com/
七牛:https://sso.qiniu.com/
网易邮箱:https://mail.163.com/
element UI: https://element.eleme.cn/#/zh-CN
flutter中文网:https://www.dartcn.com/guides/get-started
还有很多就不一一列举了。