如果你是小白,想学Android;如果你是Android开发者,想成为高级架构师;看看腾讯T4大神10答!(上

65 阅读9分钟

言归正传,如果你能看完并理解下列的内容,那么你完全可以没有必要再看前面介绍的书籍,并且对于Android已有相当熟悉了。

  • developer.android.com:Android开发官网,下面列举常用的资料:

  • Android training:Android培训文档;

  • 另外由胡凯发起了Android培训课程中文版;对官方文档进行翻译;

  • Android API指南:Android组件、Manifest配置文件,动画/图像等相关介绍;

  • Android Tools:性能、测试、Android Studio等各种工具说明文档;

  • source.android.com:介绍Android开源码相关的内容;

  • Android Performance Patterns:2015年Google陆续在Youtube上发布的Android性能优化的视频,目前已更新第4季。

  • 国内Google组织,优酷上发布了相应的 (中文)Android 性能模式 第四季;

  • 另外由胡凯发起了Android性能优化典范中文版文档;对官方视频进行翻译并整理;

  • android-developers.blogspot.com:Android官方博客,有一些比较不错的feature,博客会第一时间呈现。

1.4 Android资源整理

到这里,那么你已经具备开发App的本领。平时需要自己动手多写写App,另外就是看看别人优秀的App是如何写的,下面列举一些开源库、工具以及App:

  • android-arsenal.com:作者vbauer整理收集Github中各种开源库与工具,并提供搜索功能,是国外整理得最全面的库;
  • Android 开源项目汇总:作者Trinea整理的各种开源库,是国内整理得最全面的库;
  • codeKK 开源项目源码分析:从源码的角度,分析Android较流行的优秀开源框架;
  • codota.com:这是一个代码搜索引擎,收集的是各种API的优秀示例Java代码。

当然还有很多优秀的博客和网站值得推荐... //TODO


二、进阶篇

作为程序员,不去阅读源码,仅仅看API文档,只是浮于表象,这是远远不够的。.真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读Android系统源码,也包括阅读各种优秀的开源库。

2.1 阅读源码的重要性

借用Linux之父Linus Torvalds的一句名言:Read the fucking source code。不管是阅读Andoid系统源码还是优秀的开源框架,对能力那都会有一个巨大的提升;首先,能学习到优秀的代码风格和设计思想;能真正做到“知其然,还需知其所以然”;能指导自己更加灵活的使用API,能更加快速地找到系统bug的根源。

2.2 阅读源码的准备
  1. Java基础:上层framework以及App层都是采用Java语法;
  2. C/C++基础:Android的jni/native层代码采用C++,Linux 采用C;
  3. Linux:Android内核基于Linux的,了解Linux相关知识对深入掌握Android还是很有必要。
  4. Git:Android源码采用git和repo进行管理;
  5. Make:Android源码采用Make系统编译,源码系统中会看到很多Android.mk之类的文件;
  6. Source Insight:这绝对是看源码的神器;可以在Java、C++、C代码之间无缝衔接;
  7. Eclipse:熟悉常用快捷键,工欲善其事必先利其器;虽然Source Insight很方便,但由于对Eclipse的熟悉感,对于framework Java层面的代码,我还是更习惯用Eclipse来看,对于Native代码以及linux代码则采用Source Insight来看;
  8. Android Studio:这是Google官方支持的App开发环境,简称AS,目前已经推出AS 2.0正式版,使用教程android-studio.org;
  9. Google Drawings:这是画图工具,Gityuan博客中的文章都是采用Google Drawing完成,比如Binder开篇文中的图。
  10. StarUML:这是类图,Gityuan博客文章的类图和流程图都是采用StarUML完成,比如理解Android进程创建流程文中时序图。
2.3 阅读源码的姿态

阅读源码绝不是从源码工程按顺序一个个的文件,从首行看到尾行。正确而高效地阅读源码的姿态应该是以某一个主线为起点,从上层往底层,不断地追溯,在各个模块、文件、方法之间来回跳转,反复地阅读,理清整个流程的逻辑。同时带着思考去看源码,尝试去揣测作者的用意,去理解代码的精妙之处,去思考代码可能存在的缺陷,去总结优秀的代码设计思想。下面说说我在阅读Android源码过程常涉及的库。

阅读Android源码:

下面是我以Android开机过程为主线,展开一系列的文章 Android开篇中的一副流程图,在公司内部分享时我曾多次以下图为流程整个Android架构,如下图:

Android系统源码

android.googlesource.com:Google官方源码,国内无法直接访问,需要翻墙,对于一个程序员来说具备翻墙的能力是非常有必要的。Android源码中包含的库非常之多,下面列举我在看Android源码过程中涉及较多,也是比较常看的一些库:

  • android/platform/packages/apps:Android自带的app,比如Email,Camera, Music等,对于应用开发工程师主要关注的目录;
  • android/platform/frameworks/base: Java framework,这是framework工程师看得最多的目录;
  • android/platform/frameworks/native:Native framework;
  • android/platform/art:Art虚拟机;
  • android/kernel/common:Android内核,这是驱动工程师最关注的模块;
  • android/platform/system/core :核心系统;
  • android/platform/libcore:平台的lib库;

另外,对于无法翻墙的朋友来说,还可以通过上Github通过 Android主页 下载Android源码,这些都是定时从Google官方源码的镜像同步而来的。

2.4 优秀资源

牛顿曾说过:“如果我看得更远一点的话,是因为我站在巨人的肩膀上”,这句话很具有实用价值,看完前面的介绍,你千万不要一上来就一头扎进源码的世界,小心你会进入二次元世界,处于混沌状态,最后崩溃乃至放弃求知之路,一定要合理利用现有的优秀资源。

Android 系统源码分析

  • Innost的专栏

  • 邓凡平前辈所写博客,条例有序,覆盖了Android系统大部分内容;

  • 《深入理解Android》 (卷I,卷II,卷III)

  • 老罗的Android之旅

  • 罗升阳前辈所写博客,从各个层面介绍Android系统;

  • 《Android系统源代码情景分析 》

  • Gityuan源码分析

  • 对于邓凡平和罗升阳两位前辈的博客基于Android 2.x或4.x,目前Android已发展到Android 6.0。不管Android如何变化,其核心思维变化并没有很大,所以两位前辈的博客还是很有值得学习和参考的地方。话又说回来,Android经过了几个大版本的迭代,无论是从代码结构还是整体逻辑仍有不少变化。故博主计划写一关于Android 6.0源码系列的博文。

  • Gityuan作为Android界新秀,能力尚不及很多前辈,但有一颗乐于分享的心,有一份痴于Android的品质,有一种坚持的态度,已经并一直还在努力奋斗的道路上...

2.5 进阶书籍
  • 深入理解Linux内核
  • 深入Linux内核架构
  • Linux内核设计与实现
  • Linux设备驱动程序
  • 重构 改善既有代码的设计
  • 编程珠玑 (卷1, 卷2)
  • 设计模式
  • 设计模式之禅
  • 人月神话

前4本书都是关于Linux,如果你不是需要从事Linux相关开发,只想提升对Android整体的理解,那么只需看一到两本,对Linux的进程、内存、IO以及驱动有所了解,对CPU调度、进程间通信有所熟悉就基本可以。另外,优秀的书还有很多,这里只介绍/列举我看过的书,目前还在看一些优秀的书,后续再更新。

三、其他

最后,再说说关于学习编程的番外篇:

  • 好奇心比雄心走得更远:很多人对未来空有满腔的雄心壮志,往往不如对技术要有一份好奇心,一份探索欲,再加上一份执着的人。

  • 要有open的心态:曾经的我也只是把自己的所思所得都放入自己的云笔记,很少整理,这其实不利于技术发展,有空应该多整理自己零散的知识点,觉得不错的点可以拿出来写成博客,那是对能力的又一层提升。另外,在低头做技术的同时,还应该有空抬头看世界,不能闭门造车。

  • 天道酬勤:学历只能代表过去,能力代表现在,潜力代表未来! 你不把自己逼一把,你压根不知道自己有多优秀,只要努力去学习,去挖掘潜力,进而提升自我技术修为,未来不再是梦!共勉之!

  • 解决问题的方式:遇到问题,一定要先尝试自己解决,解决不了再请教他人。这是对自己的一个锻炼,也是对他人的一个尊重,可以有多种途径自行搜索:

  • 百度一下,很多时候还是能有所帮助的,不要过分强调google,完全抛弃百度,毕竟中文看起来比较快;

  • 先中文关键词google一下;再英文关键词google一下;

  • stackoverflow.com、知乎等技术问答网站内直接搜索;

  • 查看官方文档;

  • 如果有源码,尝试直接看源码,看能否解决;

  • 有空可以多逛逛github,多看看Google官方文档,多关注社区,定会收获不少;

  • 当然,最最重要的是能静得下心,持之以恒地专研技术。

最后

最后,我再重复一次,如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。

最后

我坚信,坚持学习,每天进步一点,滴水穿石,我们离成功都很近! 以下是总结出来的字节经典面试题目,包含:计算机网络,Kotlin,数据结构与算法,Framework源码,微信小程序,NDK音视频开发,计算机网络等。

字节高级Android经典面试题和答案

领取方法:

所有资料获取方式:评论666+点赞即可咨询资料免费领取方式!

直达领取链接:【Android高级架构师】文件夹下载!