美文网首页IT_Related项目资源Android技术知识
如何用一周时间开发一款Android APP并在Google P

如何用一周时间开发一款Android APP并在Google P

作者: 木木00 | 来源:发表于2017-03-20 13:35 被阅读867次

    作者简介 原创微信公众号郭霖 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

    相关文章

      网友评论

      • 我好芒:楼主 请问怎么把app在Google Play上线?

      本文标题:如何用一周时间开发一款Android APP并在Google P

      本文链接:https://www.haomeiwen.com/subject/dmnbnttx.html