很久前就想写一篇文章来总结自己在Android开发上的摸索与填坑的经历,在Android开发填坑已经消磨了七八年,也算有点小成果,是GooglePlay最早一批的Top developer,几个开源项目应用也比较广泛。
写出来主要为了总结自己得失,也能小范围让其他的朋友绕一点点坑!大学时期我应该算比较认真学习那种,计算机基础不错,而之后大部分时间我都是在公司工作,经历和公司业务息息相关,所以大致交待下工作经历,毕业卖身给一家手机厂商工作大约3年,期间都是在AOSP做Media及Framework修修补补,也涉及到部分Kernel。后续卖在国内某互联网公司做社交App,偏向IM/架构/信息流这些,期间还有短暂做过工具类App,因为现在更多工作在产品,这部分写出来当回顾也当总结。
由于在手机厂商工作时离Android App开发较远,但这段经历对我的帮助很大,后续逐步展开,这篇总结我想根据我个人经历划分为三个部分,初学,进阶,精进,也会做一个简单指标。
这个系列的文章只说学习计划,不谈技术细节,之后我计划推出专栏文章,由我和有兴趣的朋友完成,每篇学习计划的文章最后会列出涉及到的专题文章!
重点是这篇文章的所有内容,对高智商的人不适用,开喷的就自己写好了~
文章约3500字,精读约40分钟。
在做Android之前,我都是在C/C++的深坑里,实践方面也有,大学时期和几个师兄做了个wm输入法,后来被收购赚了几万块,去枫叶国玩了圈觉得还不错,然后就去UW做交换生了,参与嵌入式的项目,那是做了5年多的是被无数人折腾的迷宫,以至于我对看到C的层层结构体就瑟瑟发抖…丢…这个迷宫复杂得我后面看alsa都觉得是小巫!
Android开发对于初学者门槛很低,JAVA语言简单易用,我刚从C++转过来时觉得简直不得了,随手就来,终于脱离那种在尖刀上跳舞,时不时被割几道还没找出谁下的刀!
JAVA语言学习领导给我了一周,看《JAVA核心技术卷1》和《JAVA编程思想》,一边照着敲代码,厚厚的两本,我挑着看的,看到swing和applet就不看,时间短任务重,那时候年轻精力好学个皮毛飕飕快,晚上搬砖到两点也不腰疼,有点成果炫耀倍儿爽,知识点就只有这些:
JAVA基础
这些基础知识点都是非常有必要学好的,真的一点也不难,我在参加某厂的面试专家评级过程发现,很多同学在基础知识理解得不好,而我们认为这是最重要的,比扯各种高大上的模式原理占分比例大多了,我在学习这些时,都是老老实实,一行行代码理解,不用Copy和Paste,看不懂就多看几遍,去网上多搜搜别人的总结,我认为需要重点学习的内容有这些:
1、集合:理解List、Set、Map各个子集的读写及区别,以及它们在多线程时的使用,也需要熟悉java.util.Collections工具类;
2、对象和类:静态XXX是双刃剑,小心用,构造,重载,类型转换看起来很简单,其实需要花很大功夫去学习;
3、封装、继承和多态:抽象和接口的使用,子类/超类的构造器和重载,泛型的理解和使用,以及,随口说封装谈设计模式的人基础一般不咋样。
新的Kolin语言比Java看起来要领先一个时代,但我颈椎病还没完全好,暂不交流。
数据库方面我校招去了Oracle,还干了几个月,大部分的SQL都理得比较顺,稍微看了下就过了。
SQLite基础
这个其实蛮简单的,也没有什么坑会埋人,所以我就对着W3C School的文档,自己把大部分的命令试了一遍。
网络方面的东西,协议非常的多,智商余额不足深的东西基本看不太懂,只是知道有这么个回事,大致怎么用这样。
Android常用的网络协议比较少,掌握的东西主要是这些:
网络基础
Android应用开发对网络的要求并不高,HTTP是需要的,有java的工具包和Android的工具包,也有非常多的第三方库,使用起来更方便,JSON和XML也都非常好理解和使用;
Socket和RTP在某些客户端开发中要用到,也都是很基础的用法;
至于网络协议的基础原理,我建议是有余力的时候去看,我是工作3年后才去系统地学习网络知识,了解各个协议的特点和分层传输。
对于这些学习Android开发前的基础知识,我认为是必要的,不然用到时去网上copy几段垃圾代码,蒙混过关挖的坑还是会埋自己,我在这部分内容大概花了一周左右的时间。
接下来就进入了真正的Android学习阶段了,当时(2012年)市面上的Android相关书籍已经非常多了,录制的开发视频也非常多,质量非常糟糕,基本属于误人子弟的范畴,当时我学习路线:
Android入门指南 —> API GUIDE —> API最佳实践 —> 常用类库 —>Android性能优化实践
Android入门指南
这部分内容比较简单,照着官方文档的代码和文章示例看就可以了,文章阅读和IDE、SDK下载都会需要墙,也有一些国内的镜像(不推荐),看完这部分的内容,会写一个带按钮的Helloworld,能存储简单的数据,对Android通信有一点概念,权限和适配也会有个大致的印象,这部分我大概花了一天时间来完成的。
API GUIDE
大部分的平台都会有这么个API指导文档,包含package index之类,这部分的内容非常多,刚开始会有无从下手的感觉:
Android API GUIDE
Android的功能非常多,对应就有非常非常多的API,单这个API的导读都有种被吸血的感觉,我当时对这个的理解是非常浅薄的,了解存在这个API,熟知几个类方法就够了,Android有个API DEMOS的工程,我一边对着这个导读,一边去API DEMOS里面找,找到了就踏踏实实敲一边,不复制粘贴,这样一遍下来,对Android API会有大致的印象:
1)组件部分内容最杂的是Intent和IntentFilter,以及Receiver,这些Android轻量通信密切相关,重点掌握;Activity和Service生命周期的理解,数据传递方式也需要重点掌握;Android线程在JAVA的基础上延伸,其中包含Handler的使用,需要重点掌握。
2)AndroidManifest是Android各个组件的声明和注册,对应标签到Android developer上查就行。
3)Resource的内容都是简单声明和引用,基于xml,很简单的内容。
4)UI方面的知识点很多,布局以及各个控件的使用,各个xml属性的定义,按照IDE提示开发,可视化编辑体验也不错,不需要花很多时间,动态数据控件有几个回调方法,需要花时间理解和运用。
5)动画和图形在这个阶段会用就可以了,属性动画需要掌握,gl的函数认识几个就行。
6)多媒体Api对于新手来说非常复杂,我认为掌握基础的音视频播放和采集就可以。
7)数据存储方面,移动端App数据存储量少,XML键值对存储App配置,SQLite也非常简单,做多级缓存时用文件存储,也有成熟易用的Java接口。
8)和网络相关的是Android原生Api一个巨大的坑,后来Google也慢慢补上来了,放弃Apache,其他蓝牙,WIFI等接口都简单明了,网络上很多是旧的接口,去官网找文档比较靠谱。
9)Native开发,尽管Android的大部分实现都是Native层,但上层开发的同学很少使用到,能够运行和理解HelloJNI。
API最佳实践
Android官方目前有159个示例程序,每个都挺小,基本只涉及到一个知识点,大致是这样的,结合API GUIDE的知识点,认真点写一遍,就能对Android API基本都熟悉,这部分大致需要花费一个星期时间:
Android开发工具库
1) v4/v7/v8/v13/v14/v17是Google的官方低版本支持库,v后面的数字是支持的API LEVEL,都是为了支持前续的Android版本的,如果你需要高版本的Android特征又希望它能够适配低版本的Android平台,这些库就这样派上用场,除适配外这些库是没啥用的。
2)Android的API在演进过程中,留下了许多大坑,有些是JAVA语言特征留下的,有些是Android API局限带来的,于是开发者开发了许多的库来填坑,有很多库Google觉得不错,感觉可以收坑,于是就出了一些自己的官方库,也有些是收编的,导图上列的后面部分基本是这样来的,这部分能够为填坑生涯减少一点力气,都是常用库,名字陌生的话就去看看。
3)第三方库太多了,UI控件的特别特别多,我只挑了几个典型的偏大众型,熟悉熟悉,可以在颈椎病的路上走得慢一点点。
Android性能优化
性能优化是一个Android开发者必须要掌握的基础内容,Google出了一个视频专题:
Android性能优化典范
来来去去就是渲染,计算,内存,电池几个方面,这个系列有3季,没看过的需要雄起一下认真去看一遍,避免写出阿里系一样的App。
做一个简单的初级标准:
扎实的计算机基础知识
了解大部分Android基础API,熟练掌握Android各个组件,数据存储,网络编程;熟练掌握Android的线程进程及其通信方式;熟练掌握Android多线程使用。
能够独立完成Android客户端技术选型及功能结构梳理细化,熟练完成Android客户端性能调优。
能够编写出绘制帧率50+fps的网络客户端。
这篇文章到这里就GameOver,忐忑,如履薄冰,希望不会误导大家!
本文来源:http://www.imooc.com/article/39092