如何自学Android编程

如果你已经定下了学习Android的目标,那么应该提前做哪些工作,先打好哪些基础?

首先,你最好熟悉一门编程语言。目前大学的计算机相关专业甚至理工科专业普遍开设了C语言课程,但是很多学生在大学期间并没有好好学习。如果他们没有掌握好或者用的时间不长,建议先好好复习,再复习它的基础语法。最好是构建一个环境来运行和调试它。如果你还没有研究过,不妨提前研究一下。可以参考清华大学出版社出版的谭浩强《C语言程序设计》。推荐这本书的理由是:第一,经过多年的检验,应该说还是比较严谨的;其次,大部分高校使用C语言作为教材,很容易发现是购买还是借用。另外华清视界网站也有一些这方面的教学视频,可以结合起来看。

其次,如果你以后对游戏的开发感兴趣,最好对数据结构和算法有一些基本的了解。这是我在华清视界这个平台上坚持向同学们强调的。虽然在现代高级编程语言中,大部分的数据结构都已经在其类库中实现了,但一般情况下,我们可以直接使用。但是如果你能理解它的原理,当你需要置身于这些数据结构和算法之中的时候,你就能更清楚自己应该选择哪种数据结构或算法。此外,线性代数在图形图像处理中的作用也非常重要。如果能掌握一点这方面的基础知识,无疑在后续的学习中如虎添翼。比如在Android中,有一种图形变换的矩阵,有点不好用。其实它的理论基础是线性代数中的矩阵。如果你知道矩阵的基本算法,这个类的使用可以说是小菜一碟。

再次,由于Android应用的开发语言是Java语言,并且Android中也使用了大量的Java核心类库的类,所以在学习Android开发之前,可以先学习Java的基本语法和Java SE的基本类库,比如Java中的IO、网络、线程、列表、Map、树等数据结构。现在大学里有很多系都开设了Java课程,教材和书籍也非常丰富。如果你所在的系没有提供,你可以向其他开设本专业的同学借,认真完成作业,这样自己就可以写一些简单的Java应用了。如果自己买书,可以买《Java核心技术,卷1(第8版)》这本书来学习。

第四,因为在Android中,会用到数据库来存储数据,所以你也可以提前做好数据库知识的相关储备。在Android使用的SQLite中,其语法遵循标准的SQL-92语法(当然,与Oracle等企业数据库相比,其功能要弱很多)。如果可能的话,最好安装一个数据库进行实际操作。从易用性和数据的完整性来说,建议你使用微软SQL Server或者MySQL。都是我们学习数据库的好平台。另外,如果我们学过数据库原理或者关系代数,也可以在学习数据库的过程中复习这些基础知识,对我们理解数据库大有裨益。

最后,结合华清袁剑3G学院的“3G Android系统开发与就业实训课程体系”谈谈Android开发的学习方法。

Android是一个庞大的系统,从底层Linux内核到上层应用层,各个部分的内容跨度也比较大。所以,一个好的学习方法对于我们学习Android开发是非常重要的。因此,在华清高瞻远瞩的课程体系设计中,我们采取了循序渐进的方式,将大目标分解为多个小目标,逐步实现从应用层到底层系统、驱动开发全面掌握Android开发的目标。

比如你可以先从Android的应用开发开始,等你熟悉了应用,再慢慢看Android应用框架层的一些源代码,然后逐步了解Android的JNI、库、Dalvik虚拟机、HAL层、硬件驱动、Linux内核、ARM技术架构。虽然英特尔最近宣布英特尔芯片应该支持Android系统,但在可预见的时期内,ARM的优势应该还是会在移动设备上丧失。

具体来说,可以先在开发板上搭建自己的Android系统,了解Android系统的整体架构和启动流程,从而对Android有一个初步的了解;接下来学习Android的应用开发。在这里,你可以先学习Android的几个主要组件和UI组件,先对Android应用开发有一个感性的认识。在巧妙地搭建了用户界面之后,我们会逐步丰富应用的功能,比如:添加事件处理,使其能够与用户进行交互;加上数据存储功能;加上联网功能等等。学完应用后,在此基础上学习游戏编程,先了解游戏设计的基本思路,再从小游戏、小模块入手,最后完成一个类似于现在流行的《向上捕鱼》的游戏。掌握了这些应用层面的内容后,就可以学习如何在Android应用中通过JNI调用C/C++的接口,进而学习Linux的内核和驱动开发,比如字符设备驱动、Flash设备驱动、网络设备驱动等等。在此基础上学习Android驱动开发、HAL(硬件抽象层)开发、ARM架构和指令等等,让Android开发的整个体系贯穿其中。

当然,由于时间有限,底层部分内容复杂,在真正做这部分工作之前,我们只需要了解它的基本原理,做好相关知识的储备,并能够根据老师的指导完成相关实验即可。这样,在后续的工作中,你就很容易在这方面发展,上一层楼就能把事业做进去。