2.3 开源资源
到这里,那么你已经具备开发App的本领。平时需要自己动手多写写App,另外就是看看别人优秀的App是如何写的,下面列举一些开源库、工具以及App:
-
android-arsenal.com:作者vbauer整理收集Github中各种开源库与工具,并提供搜索功能,是国外整理得最全面的库;
-
Android 开源项目汇总:作者Trinea整理的各种开源库,是国内整理得最全面的库;
-
codeKK 开源项目源码分析:从源码的角度,分析Android较流行的优秀开源框架;
-
codota.com:这是一个代码搜索引擎,收集的是各种API的优秀示例Java代码。
此处本文提及的网址与博客,当然还有很多优秀的博客和网站值得推荐,这里就不一一介绍。
三、Android高级篇
作为程序员,不去阅读源码,仅仅看API文档,只是浮于表象,这是远远不够的。真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读Andoid系统源码,也包括阅读各种优秀的开源库。
如果想成为Android系统工程师,那么阅读Android系统源码便是必修课。
如果想成为高级App开发工程师,那么阅读Android系统源码算是选修课,阅读一些优秀的开源框架库算是必修课。
如果你是刚刚入门,建议先打好基础,千万不要一上看源码,一来看得费劲,二来你可能在代码间来回跳转,可能会迷失在某一个环节,更甚是理解错误,记住一定要循序渐进。
3.1 阅读源码的重要性
借用Linux之父Linus Torvalds的一句名言:Read the fucking source code。不管是阅读Andoid系统源码还是优秀的开源框架,对能力那都会有一个很大提升;首先,能学习到优秀的代码风格和设计思想;其次,能真正做到“知其然,还知其所以然”;最后,能指导自己更加灵活的使用API,能更加快速地找到系统bug的根源。
3.2 阅读源码的准备
-
Java基础:上层framework以及App层都是采用Java语法;
-
C/C++基础:Android的jni/native层代码采用C++,Linux 采用C;
-
Linux内核:Android内核基于Linux的,了解Linux相关知识对深入掌握Android还是很有必要。
-
Git工具:Android源码采用git和repo进行管理;
-
Make:Android源码采用Make系统编译,源码系统中会看到很多Android.mk之类的文件;
-
Source Insight:这绝对是看源码的神器;可以在Java、C++、C代码之间无缝衔接;
-
Android Studio:这是Google官方支持的App开发环境,另外,能方便地阅读framework Java层面的系统源码。
-
Atom: 是Github推出的开源文本编辑器,支持linux、window等多平台,可能不是最好用的,但我已习惯Atom.
-
Google Drawings:这是画图工具,Gityuan博客中的文章都是采用Google Drawing完成,比如Binder开篇文中的图。
-
StarUML:这是类图,Gityuan博客文章的类图和流程图都是采用StarUML完成,比如理解Android进程创建流程文中时序图。
3.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官方源码的镜像同步而来的。还可以从androidxref来直接查看Android系统源码。
3.4 优秀资源
牛顿曾说过:“如果我看得更远一点的话,是因为我站在巨人的肩膀上”,这句话很具有实用价值,看完前面的介绍,你千万不要一上来就一头扎进源码的世界,小心你会进入二次元世界,处于混沌状态,最后崩溃乃至放弃求知之路,一定要合理利用现有的优秀资源。
Android 系统源码分析:邓凡平和罗升阳都是我的好朋友,对于Android方面的理解有着很多共通之处,下面推荐给大家。
-
邓凡平前辈所写博客,条例有序,覆盖了Android系统大部分内容;
-
《深入理解Android》 (卷I,卷II,卷III)
-
罗升阳前辈所写博客,从各个层面介绍Android系统;
-
《Android系统源代码情景分析 》
-
前面两位的博客基于Android 2.x或4.x,目前Android已发展到Android 6.0。不管Android如何变化,核心思维变化并不大,两位前辈的博客还是值得学习和参考的地方。但是Android经过几个大版本迭代,无论是从代码结构还是整体逻辑仍有很多变化。故博主(Gityuan)撰写了Android 6.0源码系列的博文。
3.5 进阶书籍
-
Linux内核设计与实现
-
深入理解Linux内核
-
深入Linux内核架构
-
Linux设备驱动程序
-
重构 改善既有代码的设计
-
编程珠玑 (卷1, 卷2)
-
设计模式
-
设计模式之禅
-
人月神话
-
…
前4本书都是关于Linux,如果你不是需要从事Linux相关开发,只想提升对Android整体的理解,那么只需看一到两本,对Linux的进程、内存、IO以及驱动有所了解,对CPU调度、进程间通信有所熟悉就基本可以。另外,优秀的书还有很多,这里只介绍/列举我看过的书,目前还在看一些优秀的书,后续再更新。
**需要再次强调一下,**此处高级篇更主要的是针对系统工程师,对于android开发高级工程师的修炼之路,只需要掌握其中一部分即可,更核心的重点还是在app层面的知识。
四、复习知识
工作这么久要重新再去面试肯定是要将自己的知识储备重新拿出来,要把各个知识点复习到位,需要通过各个方式,选择自己最习惯的。无论是读电子书籍还是观看视频都是可以的,但要记得做好自己的学习笔记,能够起到总结的作用,再去复习起来就特别清晰了。
每个知识点都有左侧导航书签页,看的时候十分方便,需要的记得帮忙点赞评论支持一下,评论区,评论【666】即可来获取下面的大厂Android面试解析+技术知识点笔记”锦集了
4.1 Android快速面试指南
4.2 Android从入门到架构成长笔记
就拿我们移动开发人员来说,从初级程序员进阶到高级程序员,从初级架构师到资深架构师,应该如何构建自己的知识体系,成为移动架构师需要掌握哪些技能?
13年java转Android开发,在小厂待过,也去过华为,百度等,去年四月份辞职现在进了字节跳动。等大厂待过也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
我们今年整理了一份阿里P8级别的Android架构师全套学习资料,特别适合有3-5年以上经验的小伙伴深入学习提升。
主要包括腾讯,以及字节跳动,华为,小米,等一线互联网公司主流架构技术。如果你有需要,拿走记得刷不要收藏夹里吃灰。
点击我的:【GitHub】免费领取Android高级教程和面试题PDF;需要的点击查看自行下载保存!
4.3 Android从入门到精通逆向学习视频
推荐一个B站up主,里面有Android系列学习视频,专题分类!
【实战MVVM和Jetpack的完美结合让页面开发不再烦恼】
【1.什么是插件化】
.
.
.
五、其他
5.1 开发书籍推荐
如果还想看更多关于开发书籍的推荐, 可以看看diycode
发起的,由一群社区较活跃的Android人士(包括Gityuan在内)一起共同撰写的Android开发书籍推荐。
5.2 解决问题的方式
遇到问题,一定要先尝试自己解决,实在解决不了再请教他人。这是对自己的一个锻炼,也是对他人的一个尊重,可以有多种途径自行尝试解决:
-
百度
一下,很多时候还是能有所帮助的,不要过分强调google,完全抛弃百度,毕竟中文资料对大多数人来说理解起来更快; -
Google
搜索,建议先用中文关键词google
一下;再英文关键词google一下; -
stackoverflow.com、知乎等技术问答网站内直接搜索;
-
查看官方文档;
-
如果有源码,尝试直接看源码,看能否解决;
另外,有空可以多逛逛github
,多看看Google官方文档,多关注社区,定会收获不少;
5.3 番外篇
最后,再说说关于学习编程的番外篇:
- 好奇心比雄心走得更远:很多人对未来空有满腔的雄心壮志,往往不如对技术要有一份好奇心,一份探索欲,再加上一份执着的人。
- 要有open的心态:曾经的我也只是把自己的所思所得都放入自己的云笔记,很少整理,这其实不利于技术发展,有空应该多整理自己零散的知识点,觉得不错的点可以拿出来写成博客,那是对能力的又一层提升。另外,在低头做技术的同时,还应该有空抬头看世界,不能闭门造车。
- 天道酬勤:学历只能代表过去,能力代表现在,潜力代表未来! 你不把自己逼一把,你压根不知道自己有多优秀,只要努力去学习,去挖掘潜力,进而提升自我技术修为,未来不再是梦!共勉之!
- 当然,最最重要的是能静得下心,持之以恒地钻研技术。
学习福利
【Android 详细知识点思维脑图(技能树)】
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
[外链图片转存中…(img-kr7xYJ8R-1715247580599)]
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!