受朋友之托,由于他是业余进行学习,需要我帮他推荐几本书及学习方法,我在这里简要的谈谈我学习android之路吧。
我以前是做嵌入式系统开发的,对于平台比较熟,所以我的学习方向是从下往上进行学习,有相同工作经历者可以效仿一下吧:)
个人认为其实就是三大块,分为移植-框架-应用
1、android系统移植
其实这一块工作主要集成在android linux kernel 的驱动代码编写及android系统启动调试过程 。
对于android-HAL移植代码编写,其实android系统需要移植的模块较少(最精简的系统启动),只需要实现libgralloc模块,这块就是显示及显存分配的代码以及HDMI的启动高清输出。
需要熟练掌握的知识是linux驱动及android系统的启动过程会干哪些事情。以前写过相关的linux kernel及android 完整的启动流程。
只要熟悉清楚这些原理,就是解决启动过程中的问题,基本上移植android系统不会有太大的问题,只要启动了原始的android系统后面就是完善及优化系统了。
深入研究过三个平台代码(海思,ST及博通)的android代码与原始android系统代码,基本上都是这么做的。
这里推荐 <<android 系统级深入开发>> --- 移植与调试 ,可以对android的外围设备及相关移植内部有一定的了解,碰到问题多问问google,可能其它朋友也碰到过,当然也可以找你一起讨论解决。
2、框架层代码学习
这块代码需要熟悉几个android的几个重要概念: Binder (IPC通讯), Service 服务 ,Zygote 等等
紧接着就是研究大的模块代码,如SurfaceFlinger , AudioFilnger , Media(这块还一直没有时间看,很遗憾) 等,下一个计划就是研究media媒体播放这块,以前做过本地播放应该会减小很多的学习时间,知识的本质是相通的。
浏览器及虚拟机这块也是个大头,目前开发没怎么用到,所以也没有去怎么接触和了解,说不上好的建议
这里推荐 <<深入理解android 卷1>> 系统篇,写的特好,更多的内容见博客,网上很多牛人呀。
3、JAVA应用程序
这一块代码的编写,最好的教材就是 android SDK ,这些api有详细的介绍及用法,与msdn媲美。JAVA代码相对C/C++更简单,使用比较容易,语言是相通的,关键在于想清楚这个事情就是本质。