Android技术栈
作者:国风
Android 从2007年发布第一个 beta 版本,截至目前(2017-10)已经到了Android8.0,总计26个版本左右。从 Android1.0版本开始,Android 一直处于不断的进化中,作为选择了 Android 开发的我们,如何在 Android 迭代发展中学习扩展,发展良好的职业生涯呢?接下来本文将给出作者自己的学习路线作为参考,抛砖引玉。
1. Android 历史及特性
1.1 Android 诞生
Android最初是由Andry Rubin等人在2003年10月创建了Android公司,并且创建了Android团队。 2005年8月17日 Google公司用5000万美金收购了成立仅仅22个月的Android公司以及其团队。这可以说是目前Google公司历史上最成功的一次收购了,仅仅5000万美金,Google太值了。现在Android的市场占有率赶超IOS,达到(46%多)。Android系统虽然是开源免费的,但是Android系统有Google的服务是要收费的(地图、邮箱、AppStore等等服务国内无法享用)。最重要的是他打断了IOS的垄断,对公司的整体布局有着非常大的贡献。
1.2 Android 历史及特性
Android 版本号 | 代号 | API | 备注 |
---|---|---|---|
Android 1.0beta 2007.11.5 | |||
Android 1.0 (发行前有两个测试版本以机器人名称命名 铁臂阿童木 Astro Boy 发条机器人 Bender) | 没有代号 | 1 | |
Android 1.1 | 2 | 2009.2.2 | |
Android 1.5 | Cupcake 纸杯蛋糕 | 3 | 2009.4.17 |
Android 1.6 | Dount 甜甜圈 | 4 | |
Android 2.0 | Eclair 松饼 | 5 | |
Android 2.0.1 | 6 | ||
Android 2.1 | 7 | ||
Android 2.2 | Froyo 冻酸奶 | 8 | |
Android 2.3-2.3.2 | Gingerbread 姜饼 | 9 | |
Android 2.3.3-2.3.7 | 10 | ||
Android 3.0 | Honeycomb | 11 | 仅在平板上 |
Android 3.1 | 12 | ||
Android 4.0 | Ice Cream Sandwich 雪糕三明治 | 14 | 统一了手机和平板个人认为非常重要 |
Android 4.0.3-4.0.4 | 15 | ||
Android 4.1 | JellyBean 果冻豆 | 16 | |
Android 4.2 | 17 | ||
Android 4.3 | 18 | ||
Android 4.4 | KitKat 奇巧 | 19 | |
Android 4.4W | 20 | WebView版本升级 | |
Android 5.0 | Lollipop棒棒糖 | 21 | Masterial Design |
Android 5.1 | Lollipop棒棒糖 | 22 | |
Android 6.0 | Marshmallow | 23 | 动态权限 |
Android 7.0 | Nougat | 24 | 多窗口 |
Android 7.1 | 25 | ||
Android 8.0 | Oreo | 26 | 画中画、通知、全面屏 |
1.3 Android 主流版本市场占有率
详情可参考:Android 各版本市场占有率
2. Android 技术栈
2.1 Android 体系架构
Android 软件栈如上图所示,从下往上依次为 Linux 层,HAL硬件抽象层,Runtime&Library 层,Framework层,应用 APP 层。
我们通常的工作是在最上层应用层开发,直接面对的是 Android Framework 提供的 API,但是仅仅掌握 API 如何使用,如何写界面是不够的,顶多是一个普通码农,而不是Android开发者。这个在其他平台上也是如此,我们不能仅仅满足于完成工作任务。
要成为一个 Android 开发者,应该继续向下深入,对 Framework,Runtime 进行一定程度的学习,具体的深度决定了我们的能力。
2.2 Andrid 学习栈
如上图所示,本文将学习栈集中于APP应用层和框架 Framework 层。将这两个层进行细化,可以得到如下四个领域的学习:
2.2.1 APP基础
-
能够胜任各种自定义 View 控件的开发,熟练掌握 View 绘制的主要流程,onMeasure 测量,onLayout 位置布局,onDraw 绘制。同时熟练掌握触摸事件分发机制。
-
对 Android 四大组件的应用得心应手,包括:
- 熟练掌握 Activity 生命周期,任务栈
- BroadcastReceiver 生命周期以及注意点
- Service 特性以及作为后台任务应该注意的地方
- ContentProvider 共享数据
-
了解 Gradle 原理,熟悉 Android APP 打包流程,熟练常用打包方式,能够自定义 task 或者插件,完成通用打包功能。
-
对Router 解耦框架有一定的掌握,保证 APP 能够模块化,高内聚,低耦合。
-
性能优化:内存,磁盘,网络,APK 瘦身,埋点统计,Crash 监控。
2.2.2 开源库
如下列举的开源库不仅仅要掌握怎么用,更重要的是理解其设计思想和实现原理,遇到 各种定制话需求或者bug 的时候能够找到合适的方案去解决
-
网络:Retrofit,OkHttp
-
异步:RxJava
-
通信:EventBus
-
图片加载:Glide
-
AOP 依赖注入框架: Dagger
2.2.3 设计模式
- MVC MVP MVVM
- Google Clean Architecture & Architecture Components
- HeadFirst 设计模式
2.2.4 热门框架技术
- 插件化
- 热修复
- Hybrid 混合开发
- ReactNative
2.2.5 系统底层学习
- Android Framework 框架源码学习(四大组件源码运行机制:Activity 启动流程,BroadcastReceiver 机制,Service 机制,ContentProvider 原理)
- Binder 原理学习
- NDK 学习
3. 总结
相信掌握以上基础之后,应该可成为一个合格的 Android 开发者,找到心仪的工作,未来职业规划可以站在更高的角度去思考。