根据近期面试Android高工的经历与自己越来越广的经历再次对答案进行补充(由于答案范围其实可以扯的很远,以下答案就只涉及到技术知识点层面)。
首先上一张 Android 架构图(面试有很大几率被问,不熟悉的趁这机会赶紧补补~):
从Android架构得出我们必须要掌握的知识点:
- Linux知识。Android是基于Linux内核的,编译Android源码也必须在Linux上,所以必须掌握Linux的基础知识(操作区别、简单指令、进程等),没事可以装个VM虚拟机玩玩。
- C/C++知识。Android大部分核心库是C/C++的动态链接库,系统大部分隐藏API都是在这里面的,而且你看哪条面试中没写要求熟悉NDK(Java+C/C++形式)开发,所以必须熟悉C/C++知识,C语言看谭浩强的《C语言程序设计》就可以,NDK推荐看《Android C++高级编程》一书,刚出的。
- Java知识。Android是80%的Java package,IDE和语言都是Java,没理由不具备精通级的Java知识。尤其是多线程、I/O流、面向对象思想、http和socket网络等,面试必问题,Java的进阶书书大家都知道就不再提了。
- T-SQL知识(可以只是基础的增删改查和子查询)。
其它作为高工要掌握的知识:
- 数据结构(基础)
- 设计模式(推荐看《大话设计模式》,然后再带入Android API看设计模式在Android中的应用)
- Web开发语言+Html+JS(推荐php和jsp,做到最后怎么着都得熟悉一门Web开发语言)
以上皆是知识点,以下是我认为可以有的一些点:
- GitHub(这简直就是摆在那里的财富,各种你需要的Android的例子上面都有,只是你必须要学会去搜索)
- Android ROM(想想自己做一个专属的ROM屌不屌)
- afinl、thinkandroid等各种Android开源快速开发框架(要是能参与开源项目就离大牛不远了)
- iOS开发(我是很羡慕人家用苹果机我用win7系统的)
- 各种Android开发论坛(学习最快的形式是交流和传授)
如觉得还有技术方面提升的地方再补充。
Android开发的三个层次
我觉得Android开发上有三个层次技术:
1. 第一个层次和传统的嵌入式Linux最接近,主要涉及的是CPU、GPU以及外设的驱动以及使能方面。多需要熟悉Linux内核,Android框架定义中驱动的接口规范等等,这部分开源社区的力量最大。这个层次技术主要需求方是是各种CPU和Android设备解决方案供应商。
2. 第二个层次主要是涉及Android框架中间件部分,如多媒体/3D框架,Java虚拟机等等,这部分Google控制的是最严格的,因为他要控制 Android各种feature以及捆绑自己的移动互联网应用,必须规范中间件。这部分所涉及的软件技术也最多,从各种C/C++库,Java虚拟机性能,用户体验抽象到数据库设计等等很大的内涵。开发的一般也是选择一个方向发力。另外深度定制Android ROM重点也是这个层次。
3. 第三个层次就是App开发层次,这个层次主要就是利用Android SDK开发了。很多C/C++出身的觉得是用Java开发,其实Java就是啥都是指针的C++,外带try/catch以及垃圾收集,上手其实是很快的。Android程序最重要一点是理解生命周期概念,将一个Activity和Linux进程关系搞清楚,啥时候这个进程启动,啥时候睡眠,啥时候退出,后台的事件循环如何运行的,最后时刻要提醒自己虚拟机在运行,垃圾收集在运行。Google Code上有还多参考代码,在看中学,体会很快的。
另外,本人采用了一种特别的模式来进行Android程序开发:Java只负责界面,用NDK来做各种复杂的业务和数据处理,Java与NDK之间设计好API以及事件传递方式(Android SDK 中Localsocket就可以很好用做事件发送)。这种方式适合C/C++背景的开发人员上手Android,Java无需达到熟练即可。