如何用一周时间开发一款Android APP并在Google Play上线

作者简介 原创微信公众号郭霖 WeChat ID: guolin_blog

漫长的一周终于结束了,先提前祝大家周末愉快!

本周的最后一篇文章来自黎赵太郎的投稿,分享了个人开发一款APP并上架的经验。由于篇幅限制,我这里只挑出了文章的主要部分,感兴趣的朋友可以访问下面的博客地址查看全部内容。

黎赵太郎的博客地址:

http://www.jianshu.com/u/49606f4d970f

前言

目标:实现纸飞机App - 采用MVP架构,集合了知乎日报、果壳精选和豆瓣一刻的综合性阅读客户端。项目地址:

https://github.com/marktony/PaperPlane

效果图如下所示:

本次教程分为7天,内容分别为:

第一天,准备

功能需求

可行性分析

其他准备

第二天,UI

选择合适的UI

第三天,整体架构

第四天,首页列表

界面编写

实体类

显示数据

缓存内容

第五天,详情页与其他

界面编写

实体类

显示数据

设置与关于

第六天,高级功能

夜间模式

版本适配

第七天,发布与开源

在Google Play上线

在GitHub开源

思考

好了,废话不多说了。现在就开始吧。

DAY 1

俗话说,万事开头难,准备工作做好了,可以起到事半功倍的作用。磨刀不误砍柴工嘛。

功能需求

在开始正式编码之前,咱们还是得先把要实现的功能一一列出来,后面实现起来才有方向嘛。我认为咱们需要实现的功能有:

正确获取消息列表并展示

能够获取历史消息

展示内容详情

后台自动缓存内容详情,方便用户在无网络连接时查看

收藏特定消息

夜间模式

一共6个大的需求,不多,但是我们仔细的研究一下,实际上这6个需求涉及到了网络,UI,数据存储,后台服务等内容。相信对于聪明的你不算困难,现在我们来研究一下可行性。

可行性分析

我们首先需要考虑的问题就是:数据从哪里来?感谢开源,GitHub上 izzyleung 大神分析了知乎日报的API并开源了,项目地址请戳这里:

知乎日报 API 分析

https://github.com/izzyleung/ZhihuDailyPurify/wiki/%E7%9F%A5%E4%B9%8E%E6%97%A5%E6%8A%A5-API-%E5%88%86%E6%9E%90

分析的非常详细,纸飞机项目在初期,也就是版本3.0之前也只使用了这一个API,在3.0之后还使用果壳精选和豆瓣一刻的API。如果你还想要展示更多的内容,可以戳这里(收集了一些国内外常用的API):

Awsome_API

https://github.com/marktony/Awesome_API

我们来粗略的看一下数据的内容。获取知乎日报2017年1月22日的消息列表:

http://news-at.zhihu.com/api/4/news/before/20170122

服务器向我们返回JSON格式的内容:

OK,获取到了列表之后,我们就可以获取详细的内容了,例如,我们获取id为9165434的内容,只需要将id拼接到http://news-at.zhihu.com/api/4/news/之后:

http://news-at.zhihu.com/api/4/news/9165434

获取到的内容为:

body字段中就是html格式的内容详情,我们就可以使用 WebView 来展示了。当然,知乎日报的API接口不止上面的两个,你可以点击上面的链接查看。获取果壳精选和豆瓣一刻的内容,你可以在我的项目中直接查看文件Api。

其他准备

工欲善其事,必先利其器。工具准备好总是没错的。其他不多说,推荐一款功能强大的网页调试与发送网页 HTTP请求 的Chrome插件,我们做网络请求分析时需要用到:

Postman

https://www.getpostman.com/docs/introduction

好了,第一天的工作差不多就是这么多,熟悉一下API,把工具备好,收拾一下心情,准备明天的工作。

DAY 2

今天主要完成的是UI设计。你可能会问了,这不是设计师的工作么。然而,我在开发纸飞机的过程中,并没有射鸡湿这种生物,UI就我自己完成了。相信大多数的程序员,美术方面应该不是那么地擅长。

当然,有美术和相关基础的同学可以试试用Sketch或者PS把原型图画出来,对于没有美术基础的童鞋,最简单的方法当然就是模仿现成的APP了。当然,你也可以在下列网站寻找合适的设计图:

Dribbble

https://dribbble.com

UpLabs

https://www.uplabs.com

UI中国

http://www.ui.cn

站酷ZCOOL

http://www.zcool.com.cn

另外,还有一些小的注意事项:

1.遵守Material Design设计规范- 这不是强制性的要求,但是,既然我们是开发一款Android App,如果我们自己都不遵守规范,还怎么指望Android环境变好呢。

2.正确使用BottomNavigation- BottomNavigation 作为 Google 的打脸之作,诞生之初就倍受争议。我个人的建议是使用 TabLayout 代替底部导航,这是涉及到信仰的大事情。如果一定要用,请不要把iOS上的标准直接放在Android上使用,请参考这一篇文章:

Material Design 中的 Bottom Navigation 并不是无脑移植 iOS 导航模式的许可证

https://zhuanlan.zhihu.com/p/22005972

并且,我向你投来一个鄙视的眼神。

3. 使用正确的图标- 尽量使用https://material.io/icons网站上的图标,如果你使用iOS版本的图标,我再次向你投来一个鄙视的眼神。

首页使用 Drawer 作为顶级导航,Tab 为二级导航,列表项使用卡牌布局,使用 FloatingActionButton 作为日期选择按钮;详情页面使用可收缩的 Toolbar,图片搭配文字的形式。其他高深的我也不懂了。到后面你会发现,这里我犯了一个错误,卡牌布局用在这里是不合适的。参见:

https://material.io/guidelines/components/cards.html#cards-usage

DAY 3

现在开始就要真正的写代码了。新建Android Studio项目什么的就不说了,下面的是我的项目结构图:

不难看出,我是按照页面和功能进行分包的。

包建立完成后,我们开始导入第三方的开源库,便于简化代码的编写和实现特定的效果。找到工程目录下app文件夹,打开 build.gradle 文件,添加如下内容。

由于一些历史遗留问题,我并没有使用 OkHttp 作为网络请求包,而是选择了 volley。如果你有一定的基础,可以选择使用 OkHttp。

导入volley有两种方式:

1.在 app目录 下的 lib目录 下粘贴volley的jar包,你可以在这里下载到:

https://github.com/marktony/PaperPlane/blob/master/app/libs/library-1.0.19.jar

2.当然也可以通过 gradle 引入:

compile'com.android.volley:volley:1.0.0'

首先是整体的架构:MVP。关于整体架构的选择以及更加详细的介绍部分,可以戳这篇文章:

重构!将Google-MVP应用于已有项目

https://marktony.github.io/2016/09/27/%E9%87%8D%E6%9E%84%EF%BC%81%E5%B0%86Google-MVP%E5%BA%94%E7%94%A8%E4%BA%8E%E5%B7%B2%E6%9C%89%E9%A1%B9%E7%9B%AE

这里我们仿照Google的Android Architecture Blueprints [beta]中的:

todo-mvp

https://github.com/googlesamples/android-architecture/tree/todo-mvp

1.首先创建最基本的BaseViewBasePresenter,他们分别是所有 View 和 Presenter 的基类。

2.然后创建一个契约类,用于统一管理 View 和 Presenter。这里以知乎日报的部分为例(如果没有特别说明,后面的代码均以知乎日报的部分为例,果壳精选与豆瓣一刻的代码类似,详细代码可以在 GitHub 的 repo 中找到)。

ZhihuDailyContract.java

3.在上面已经分好的子包中,创建相应的子类 View 和 Presenter。

4.创建VolleySingleton,即 Volley的单例。这样,整个应用就可以只维护一个请求队列,加入新的网络请求也会更加的方便。

5.然后是 Model层 的实现。使用了 Gson 之后,对JSON的转换更加方便了,所以,我们只需要返回类型为String即可。

定义了两个方法,分别为请求成功时和请求失败时的回调。

然后定义一个 StringModel 的实现类 StringModelImpl:

5.到这里,基本的架构就搭建完成了。现在可以喝杯咖啡,然后完成今天的最后一点工作,为后面的工作做准备。

创建Api.java文件,用于存储app所用到的所有API:

创建NetworkState.java文件,判断当前的网络状态,是否有网络连接,WiFi或者是移动数据:

创建DateFormatter .java文件,方便将 long类型 的日期转换为 String类型。

OK,day 3工作完成。


完。。。。。。。。。。。。。。。。。。。。。

文章原创作者GuoLin 书籍推荐

郭林大神原创android 书籍:《第一行代码 android》

淘宝链接: https://s.click.taobao.com/t?e=m%3D2%26s%3DgKUfuKdAZKocQipKwQzePOeEDrYVVa64K7Vc7tFgwiHjf2vlNIV67p2n%2BQBNMyE6Rku8%2Bpj6eJall3bs%2B3NRhNHnsKI%2BqxhyM0iVZhTFBom4YIorMPnmg8G0g2OJi%2FzmXHfenomYtn5EW9vzeG8LzfPUwktUBEmkxg5p7bh%2BFbQ%3D&pvid=10_106.6.161.154_3367_1490163222155

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,544评论 25 707
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,072评论 2 44
  • 我们即将去一个叫白石湾的地方 在那里,盖一座小石屋 用山涧里水草缠绕的石头; 栽几株野紫藤,种三亩土茶在山坡 来年...
    佑洱阅读 164评论 0 1
  • 微光晨起雾连霜,城河曲纵冰封藏。 倦意临心囊四海,途人惊扰一黄粱!
    寒易阅读 241评论 0 0