我的成长之路

不想看我的废话,直接点击[导航]王小二的技术栈站目录

前言

我是一个从2014年毕业到目前为止一直在Android领域工作的工程师,我想分享一下个人的成长之路,帮助大家可以少走一些弯路,或者有一些新的启发。

2014年2月-2015年1月:

当时我是大四下半学期,公司希望我去实习,因为我之前是做javaweb方向的,所以我在寒假里差不多7天时间,学完了《疯狂android讲义》,刚开始实习,主要是解决bug,这时候改一个UI的字符串的异常,就已经很开心了,正好有同事要离职,他把一个已经开发差不多的APP交给我开发,这个时候我渐渐掌握了自定义控件,动画,Handler,四大组件的基础用法。由于是在手机厂商工作,所以也有了APK编译流程的概念,了解源码下编译APK和Eclipse编译的相似之处。

2015年2月-2015年5月:

去印度出差,增长了很多见识,也是第一次知道什么叫native crash,发现高通工程师分析log的能力非常强,这个时候我对整个android系统有了一丢丢的概念。最关键是了解到高通在手机厂商中角色。

2015年5月-2017年5月:

从印度回来之后,我被分配到了FWK组,主要是负责手机的稳定性,这个时候就会有大量的crash,手机重启等问题,渐渐的对system_server进程,开机流程,开机动画,zygote进程,Input子系统有了一些概念,幸运的是我参加了一个有关于VR的项目,让我对SurfaceFlinger有了一定的概念,但是这个时候说实话,我对native开发能力,也就能看看代码,有时候还看不明白,而且找了好多资料,都无法掌握native的开发能力,而且我持续不断的在学Binder机制,但是总是感觉没有学明白,老罗的《Android系统源代码》无数次的打开,又失望的合上。

2017年6月-2018年6月:

我认真的研究JNI,等研究完JNI之后,我发现不管是Binder机制,还是原来一些看不大懂的FWK的native代码,也能看懂了,还有Looper源码也更加理解了,但是说让我去开发一个native的程序,还是有一点虚的

2018年6月-2019年6月

我开始慢慢接触Linux kernel,复习C语言,慢慢的了解了Linux的一些IO复用机制例如Epoll机制,跨进程通信例如socket通信,pipe,匿名共享内存,对Binder驱动也差不多理解了百分之70,一下子把我前几年所学的知识串联起来了。
Looper:Epoll + eventfd
Input子系统:Socket + Epoll + Binder机制
Surface GUI:Binder + 匿名共享内存
虚拟机的fork:Socket

2019年6月-至今

我开始正式学习Linux kernel,主要方法是IO方向,正好学习了VFS,也看了Linux驱动开发的书籍,一下子发现了差不多完全理解Binde机制,而且通过Binder机制反过来了解Linux的进程管理,内存管理,同步锁等,我又看了《程序员的自我修养》这本书,对一个C语言程序在Linux系统上运行的状态,有了一个充分的了解,一下子我发现自己把整个Kernel+Fwk+App都打通了。脑海中可以浮现出整个手机运行状态的每个进程,每一个线程在干嘛。

借用gityuan的一段话描述我目前的一个状态:

Android系统之博大精深,包括Linux内核、Native、虚拟机、Framework,通过系统调用连通内核与用户空间,通过JNI打通用户空间的Java层和Native层,通过Binder、Socket、Handler等打通跨进程、跨线程的信息交换。只有真正阅读并理解系统核心架构的设计,解决问题和设计方案才能做到心中无剑胜有剑,才能做到知其然知其所以然。当修炼到此,恭喜你对系统有了更高一个层次的理解,正如太极剑法,忘记了所有招式,也就练成了太极剑法。

再回过头去看看那些API,看到的将不再是一行行代码、一个个接口的调用,而是各种信息的传递与交互工作,而是背后成千上万个小蝌蚪的动态执行流。记得《侠客行》里面的龙木二岛主终其一生也无法参透太玄经,石破天却短短数日练成绝世神功,究其根源是龙木二岛主以静态视角去解读太玄经,而石破天把墙壁的图案想象成无数游动的蝌蚪,最终成就绝世神功。一言以蔽之,程序代码是死的,系统运转是活的,要以动态视角去理解系统架构。

未来

目前我的主要工作是负责android手机的性能优化,kernel的IO优化,我发现工作那么多年,只能说目前的自己真正有能力去研究一些东西了,自己的知识体系已经建立起来了,可以添砖加瓦了。

这些年我看过的书

IMG_9253.JPG

但是我还是推荐这五本书


IMG_9202.JPG

目前在看的书
图片发自简书App

总结

1.从APP层-FWK层-Kernel层打通的难度和周期远远大于Kernel层-FWK层-APP层,我就是属于前者,走了太多的弯路,后者的发展之路,我相信会比我快很多,gityuan就是属于后者。

2.Binder机制一定能要研究,否则你基本不可能可以打通整个android系统。跨进程通信,跨线程通信都是我们需要去仔细研究的。

3.你可以不精通C++,但是一定要达到Linux C语言的开发能力,其实我们缺的不是Android NDK的能力,而是缺的是Linux C的开发能力。

4.多看看书,我文章中用了好多次的一下子,整个一下子真的是一下子顿悟了,因为我之前已经有大量知识的积累了,所以捅破窗户纸,就可以豁然开让,当然我的同事也很牛逼,也帮我捅破的很多窗户纸。

5.多去回答同事和网友的问题,在一次次回答问题,被反问中,你自己对知识的理解会不断的加深。

6.当你发现自己不懂的知识越来越多的时候,证明你懂的知识越来越多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345