分享我学习 Androd 开发过程中写的小项目

前言
在公司 iOS APP上线后,Android 项目也要提上日程,因为只招一个安卓开发,同时还希望安卓APP也尽快上线,所以我又学起了 Android开发。以协助安卓工程师开发。从五月初到现在,APP 终于上线。我也学到了很多 Android 开发的技术,现在我把我学习过程中开发的小项目分享出来。学习 Android 开发的小项目,这是 Github 地址,如果你感觉对你学习 Android 有帮助的话,请给个 Star
刚开始时我们都是用 Java 开发 Android,对于写了好几年 Swift
的我完全不能忍受 Java 的语法,没有元组(可以通过第三方实现),没有高阶函数,没有扩展方法,不像Swift,接口(Interface
)所有方法都要实现的,没有可选实现的。没有自定义运算符,句末要加分号等很多我在 iOS开发过程中常用的语言特性都没有。直到后来 Google 宣布 Kotlin
为Android 开发的一级语言。我就去随便了解下 Kotlin
的语法,发现Kotlin
和 Swift
的语法实在是太像啦。两者相似度应该有 80% 以上吧,请参考 Swift 和 Kotlin 语法比较。所以那还等什么?和同事协商后,确认可以在同一个项目里面可以同时使用 Kotlin 和 Java 开发,那么我果断换成 Kotlin
开发,Kotlin
确实比 Java 简洁多了,不再需要butterknife
框架,不需要写各种事件类,各种 View 也可直接从 XML 里面直接取出,再加上高阶函数和扩展方法,仿佛又回到了 iOS 开发 APP 的感觉。其开发体验和用 Java 开发完全不可同日而语。所以我在自己学习 Android 开发写的小项目也全是用 Kotlin
开发的。这里我就不再详细介绍 Kotlin
了,下面直接给出这些小项目吧,

这 6 个小项目从上下到依次是天气,小说,美图,五笔查询,花瓣和2048 AI版。
下面一个一个说起
6 个小项目
Weather

Weather 是学习 Android 最经典的 Android 学习入门书《第一行代码》的最终实战,这个例子覆盖的知识点非常全面,有网络请求,Json 转换成 Model,抽屉布局,DataSupport
数据库的使用还有 Service
服务,作为入门的实战 APP 实在是再适合不过了。书上是用 Java 写的,我在这里全部使用了 Kotlin
来实现。代码更加精简些。
Novel 小说阅读

我有很多同事都是小说狂人,但是貌似很多小说 APP 都有广告(我不看小说不清楚),于是让帮忙写个小说 APP,他用都用 iPhone,于是我写了个 iOS 版本的小说阅读 APP iOS小说阅读器,然后我再想试试写一个Android 版本的,于是就有了这个小项目,

BaseQuickAdapter
真的很强大,解决了很多 RecyclerView
的实际需求,比较下拉刷新和加载更多等。书签用 DataSupport
保存,这个小项目没有使用到接口,是解析 HTML
实现的。使用了 Jsoup
来解析 HTML
,非常好用。另外在开发过程了还碰到了BGK
问题,需要用到字符串 bytes
。问题不大。总之整个项目比较简单,很容易看懂。
美图


无意中发现个网站,里面的图片质量还算不错,用来当壁纸比较合适。还可以用分辨率筛选。于是下载了他们官方的 APP,但是官方 APP 有广告,而且好像只能看手机壁纸,不能看电脑的。这两点让我非常不爽。于是我就想自己写一个 APP,无广告,可以随意收藏和下载高清壁纸。感觉很不错
开发的技术难点并不多,使用和小说阅读器一样的技术。图片显示用了Fresco
,图片下载用了 Glide
。
五笔查询

笔者是一个五笔使用者,虽然用了很久五笔了,但还是有很多字不会打,所以我一般在我手机上安装了五笔反查这个APP,本来作为简单的查询APP,应该十分简洁的,但是里面的广告非常让我不爽,而且非常容易点到。体验也做得比较次。比如历史查询功能就做得很一般。所以我干脆自己写一个。
这个小项目没有特别的技术难点,唯一的难点度不在于 APP,而是查询网站令人蛋疼的编码,全部采用GBK
编码,而且对请求和请求体有一些特殊要求。请求时需要加上这些参数,查询的文字需要用 UrlEncode
进行GBK
编码,然后再和 key 拼起来。探索这结东西花了些时间。
花瓣


花瓣 APP 也算了个中型的 APP 了,我是按照 Github 的花瓣 开源项目来写的,主是要学习里面的架构写法。实现了收集,登录,喜欢,搜索等功能,原作者说全部采用目前最新的和最热门技术。所以还是有一定有学习价值的。你可以把我写的这个看成是Kotlin的实现版本。但是里面关于Fragment 的实现机制不一样,我用了 BaseQuickAdapter
,所以会比较简单些。
技术方面用了 [RxJava/RxAndroid]
实现异步响应,简化了很多异步回调的代码。网络方面使用了 Retrofit
,搭配 RxJava
很实用,处理数据转化成 Model
一步到位。其他有兴趣的可以参考代码自己实现一次,就能明白里面的架构和技术了。
2048 AI版

2048 是一款具有魔力的游戏,很容易上瘾。一玩就停不下来。但是我水平很菜,从来没有合出来 2048。既然我合不出来,就让 AI 来帮忙吧。于是我参考了 2048 的 AI 实现资料,目前网络上最主流的是算法是MixMax 算法,请参考文章 2048 AI 程序算法分析,里面详细地分析了这个算法,并且给出了js的实现。于是我也想在APP上实现这个算法,首先我要找到 2048 在安卓上在实现。我找到了这个 Android版2048游戏视频教程源码,这个APP写得非常好,还有作弊和撤销功能。我就用这个APP的源码,并把它用 Kotlin 重新实现了一遍。然后再添加AI功能。AI的源代码我参考了 2048 AI 的实现。发现里面的 2048 实现机制和安卓机制很像,在这个基础上加上AI代码应该不难。事实上确实如此,很快我就把AI代码移植过去并成功运行。经过简单的调试后再测试了很多次,合出2048豪无压力,只是.....我不明白为何一但AI合出2048后突然就智障了,后面的每一步都像自杀一样,豪无章法。很快就挂了。目前工作还比较忙,有时间我再看看为何会这样。
技术方面最主要就是2048的AI算法以及在Android上使用Kotlin的实现2048。这又是比较大的一块,我将专门写一篇文章来说明这个AI算法和实现代码。
到目前为止,我已经开发过iOS项目,Android项目,小型 Windows App项目 参考 Windows APP时钟 和 Web 项目(参考上一篇文章的Vue和Node实现的完整Blog项目),微信公众号和小程序也有了解过,后端的话用过ASP.Net和Node.js。对目前最主流和开发平台的开发技术都有一定的了解。如果读者想进入这个行业但又不知道选择哪个平台来入门,又或者读者已经熟悉了一个平台,想再选择学习另一个平台的技术,但是不知道选哪个好,那么可以联系我。我会帮助读者结合自己的兴趣和已有知识再加上目前各平台的行情选择一个合适的平台技术学下去。
最后再给出地址学习Android开发的小项目,麻烦Star啦.
https://github.com/DuckDeck/AndroidDemo
与之相关
日
更
精
彩
微信号:code-xiaosheng
公众号
「code小生」