首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Android开发学习路线分析

Android开发学习路线分析

Android发展现状
Android系统在被Google收购后,经过这5年的发展,已经迅速成了这个世界上适用范围最广的移动操作系统。而根据移动市场的迅猛发展以及Android良好的发展势头,IDC甚至做出了在2016年Android将会超越Windows系统,成为世界上使用范围最广的操作系统。(根据IDC的统计,截止到2011年年底,包括个人电脑,媒体平板电脑和智能手机在内的操作系统市场份额,微软Windows占据35.9%,Google Android以29.4%居第二,而苹果iOS系统份额居第三,为14.6%)。Android凭借着其开放性,得到了广大厂商的热烈追捧。而明智地选择以Java语言作为应用开发语言,也得到广大的开发者的青睐,客观上也极大促进了Android系统的繁荣。而越来越多的开发者和初学者都希望能尽快进入到这个平台。本篇文章即试图从Android开发在国内的现状入手,结合笔者从事Android开发和教育的一些经验教训,和大家讨论一下学习Android开发的路线,以期能给有志于从事Android开发的初学者一个指引,提升学习的效率。
目前国内Android开发市场的现状
目前国内的Android开发还是主要以应用开发为主,主要分成3类:为企业开发应用、开发通用应用(放到Android Market或者其他App Market销售)以及游戏开发(放到Android Market或者其他App Market销售)。第一类开发者一般身处规模较大的公司,这些公司主要为自有品牌或者其他品牌设计手机或者平板电脑的总体方案。除了根据需求对系统进行定制外,更多的工作在于为这些系统编写定制的应用。第二类开发者,一般处于创业型公司或者是独立开发者,他们的盈利方式主要是2种:为国外公司进行外包开发,或者通过Google的移动广告(AdMob)通过广告点击分成。而理论上的通过付费下载的形式来盈利的,现在国内鲜见成功者。第三类开发者,目前和第二类开发者类似。下图是开发者提交的应用和游戏的数目所占的比例图,从中也可以看出应用开发数目远超游戏开发。(数据来源:创新工厂)

什么样的人可以学Android?
相对于其他移动开发平台,因为Android的(应用)开发采用了Java语言,所以,它的学习曲线相对比较平缓。对于那些有一些编程语言(如C/C++/Java等)训练的人士,都可以考虑学习Android应用开发。当然,如果你希望从事Android游戏开发,那么,最好能在高数、离散数学甚至计算机图形学等方面有比较扎实的基础。如果后续想往底层开发如系统移植、驱动开发等方向发展,或者为了更好地理解Android 应用架构体系,那么,具备一定的操作系统知识是必要的,当然,并不需要你对操作系统有多精通,而是对其基本原理有一定了解即可。
Android开发需要学习什么?

上面是Android的体系架构图,自上而下分别为应用层、应用框架、类库和Dalvik运行时环境以及Linux内核。一般来说,我们想从事Android开发,可以从应用开发作为切入点,逐渐熟悉其整个体系,并慢慢往其底层渗透,从而能做到软硬兼备。而从学习的路线图上来说,先熟悉Java SE编程,能比较熟练的使用Java语言进行编程,熟悉Java语言语法特点,熟悉Java IO、Java线程、网络编程、XML处理等。另外,因为很多的Android应用在运行时都需要去访问网站服务器,因此,熟悉一种网络编程语言也是必要的。无论是从学习的方便性还是市场占有情况来说,使用JSP/Servlet都是不二的选择,另外,在这个阶段也顺便学习一下SQL语法和熟悉一种SQL数据库,以方便后续Android开发中进行SQLite数据库开发。学习完这些课程后,就可以开始进行Android的应用开发的学习,例如Android中的UI组件、基本组件、数据存储、传感器、图形图像处理、多媒体处理、游戏开发等。为了更好地进行应用编程,可以有选择的对其Lib类库进行分析,以加深对其工作机制的理解。再往下,就是操作系统层级了,这里应该要对Linux操作系统进行学习,熟悉其内核和运行原理,熟悉ARM体系架构以及常用指令,并熟悉驱动的编写方式,掌握其移植方法等。
如何做好Android学习前的准备?
如果你已经确定了学习Android的目标,那么,应该提前做好哪些工作、先打下哪些基础呢?
首先,你最好先熟悉一门编程语言,现在大学里面和计算机相关的专业甚至理工类专业一般都会开设C语言课程,只是很多同学在大学期间并没有好好学习,如果对它掌握的不太好或者很久没用了,建议先从将其好好复习一下,将其基本的语法再好好回顾一下,最好能搭建一个环境来运行、调试它。如果没有学过,不妨也提前学习一下,可以参考清华大学出版社出版的谭浩强老师的《C语言程序设计》,推荐这本书的原因一是它已经经过了多年的考验,应该说还是比较严谨的;其次就是大部分的高校所开设的C语言使用的教材都是用它作为教材,因此无论是购买还是借阅,都容易找到。
其次,如果你后续有志于游戏方面的开发,你最好具备一定的数据结构和算法基础知识。虽然现代的高级编程语言中,其类库中已经帮我们实现了大部分的数据结构,一般情况下,我们直接使用即可。但如果你能对其原理有所了解,当你需要在这些数据结构和算法中间的时候,你可以能更加的清楚到底应该选择那个数据结构或者算法。另外,在图形图像处理上面,线性代数的作用也非常重要,如果能掌握一点这方面的基础知识,无疑也会在后续的学习中如虎添翼。举个例子,在Android中,有一个用于图形变换的类Matrix,用起来稍有点难。其实它的理论基础就是线性代数中的矩阵,如果你了解矩阵的基本算法,这个类的使用可以说就易如反掌了。
第三,因为Android的应用的开发语言用的是Java语言,并且在Android中也用到了Java核心类库的大量的类,因此,在学习Android开发之前,可以先把Java基本语法和Java SE的基础类库好好学习一下,例如:Java中的IO、网络、线程、List、Map、Tree等数据结构。现在的大学里也有不少的院系开设了Java课程,教材和图书也非常丰富,如果你所在的院系没有开设,也可以从其他开设了这个专业的院系同学那里借阅一下,并认真完成他们所布置的作业,争取自己能动手编写出一些简单的Java应用。如果自己购买图书,可以购买《Java核心技术,卷1(原书第8版)》这本图书来学习。
第四,因为在Android中,会用到数据库来存储数据,因此,也可以提前对数据库知识做相关的储备。在Android所使用的SQLite中,其语法是遵循标准的SQL-92语法的(当然和企业级数据库如Oracle等比较,功能上要弱很多),有条件的话,最好也能安装一个数据库来进行实际的操作。从易用性和资料完备性来说,建议大家使用Microsoft SQL Server或者MySQL就可以了。它们都是我们学习数据库的好平台。另外,如果曾经学习过数据库原理或者关系代数,那么,在学习数据库的过程中,也可以再好好地复习一下这些基础知识,对我们理解数据库大有裨益。
如何学习Android开发?
根据前面的分析,我们要从事Android开发,以Android应用开发作为我们的起点无论在回报周期还是在学习规律上来说都是比较好的。下面我就再说明一下如何学习Android应用开发。首先,我们应该对Android中的常用图形界面组件有较深的了解,可以说一款移动应用的成败很大程度上取决于界面的美观程度和使用时的友好度,所以其重要性不言而喻。而从学习角度来说,从直观的图形界面组件入手,无疑会容易一些。当然,因为图形界面必须通过有“Android四大组件”之一的Activity组件来显示,所以在此之前应该对Activity有一个简单的了解,主要知道它怎么使用就可以了。在学习完图形界面组件后,可以结合Android中的事件处理来学习Intent,并且在后续学习BroadcastReceiver和Service这2个组件,Service组件中远程服务的概念比较难懂,这个可以放到后面再来学习,这个阶段只要先把Service的基本用法掌握好即可。然后需要学习Android中的线程处理,主要需要熟悉Android中的UI线程(主线程)和其他线程的关系,掌握AsyncTask、Handler/Looper以及runOnUIThread方法等。然后就可以学习Android中的数据库编程,并且结合前面的图形界面组件,将数据库中的数据显示到UI中,并且学习四大组件的最后一个——ContentProvider。接下来就可以开始学习Android中的图形图像处理了,这部分内容是游戏编程的重要基础,如果希望能从事游戏开发,那么这部分需要好好花功夫学习。多媒体在游戏中也扮演了重要的角色,在学习完图形图像处理后,还需要学习Android中的多媒体处理功能,例如音视频的录制和播放等。接着可以学习一些和传感器相关的编程,相对来说,这部分功能的学习还是比较简单的。因为现在的Android应用几乎都离不开网络连接,所以对Android中的网络编程也需要好好掌握。最后,就是掌握Android中的定位和地图功能。学习完这些核心的功能后,就可以在此基础上完成大部分应用的功能了,在项目开发中碰到问题,再通过学习来拓展其他的知识和技能。在熟练掌握Android应用层开发后,可以多看看Android Framework中的源代码,并追根溯源,逐渐去了解其HAL层和Libraries层的实现,直至去了解Linux内核层和硬件驱动的相关开发技术,当然,这里需要具备一定的C/C++编程能力以及对操作系统、硬件都有一定的了解,建立起Android开发的完整知识体系。
以上是笔者从事Android教育工作2年来的一些心得,抛砖引玉,希望能对期待进入Android开发领域的朋友们有所帮助,也希望朋友们能多多指正,为Android在中国的发展以及移动开发在中国的推广共同努力。
返回列表