作者: 浪迹在
原生开发,主要以大平台为主。因为它的成本比较高,需要安卓,IOS 和 Web 各个方向都要投入人力。做系统维护的,接触的系统级别的 APP,基本都是原生开发的,不会是跨平台。这里就是牵扯一些开源框架,像 MVP 、MVVM 框架,以及开源 okhttp 、Retrofit 等等。
跨平台开发出现在小公司,以及需要快速迭代的场景下,它能够快速推送到各个平台,能够实现后台热更,可以方便的修复问题。主要技术有 react-native 和Flutter 。
系统移植和裁剪,主要是以 Linux 驱动为核心,同时移除一些系统服务,开发一些守护进程。这个以 C 、C++为主,门槛比较高,有驱动经验,对操作系统有概念。
这个主要的市场就是那些性能要求较高的场景,需要启动快,比如路由器。
电视盒子这里需要掌握的是 TV 开发场景,它跟我们普通的开发有区别,因为不是触摸响应,而是按键,需要焦点切换,以及实现一些软键盘之类的东西。
智能门锁,需要的和嵌入式开发差不多,安卓系统也可以来实现,这里除了硬件驱动,还有就是上层的指纹识别,以及屏幕显示,监控系统。
音视频开发随着这个 5G 到来,流量问题解决,会是个强需求。相关的抖音,快手这些,对于音视频的需求很大。这里开源的项目主要是 FFmpeg sdl2 ,如果要说更多的话,那么加上 opengl es,以及 glsl 或者其他的 gpu编程。
系统级别的开发,以虚拟机优化,分身,系统广告拦截,通知管理,权限,静默安装,分屏,像 APP 的插件化编程,注解编程这些,APM 性能监控,sysTrace 分析,蓝牙 Wifi 功能定制等等。
其余的就是在细分领域,虚拟机优化,xHOOK,xp插件 开发,辅助功能开发,自动化测试脚本,浏览器开发,GPS硬件 芯片调优,音频,相机调优等等。
接下来说说具体该怎么学习,这里写个我学习的路线,更多细致学习,我也分享这么多年来收录整理的学习资料,帮助大家提升。
这里具体为:
除此之外,还有这些:
View 这里主要以 TextView 、Button 这种为主,主要是去熟悉如何开发一个应用,如何调试,如何布局。这里比较关键的是,如何自定义View,懂得核心的三个方法,测量,布局,绘制,同时知道绘制的一些方法,比如 Path,以及 xor图像 混合,画一个仪表盘,以及动画。
这个学习完了后,开始进入 SurfaceView 学习,这个学习 openGL es 的开发流程,绘制过程,以及语法,生命周期。为什么学习这个呢,因为很多开源库,就是用的这个,比如 cocos2dx 、 libgdx ,游戏引擎大多数都是这种,因为耗时,而这个 SurfaceView 是另开辟的线程,所以没有这问题,并且直接对应一个Layer,可以快速绘制。
四大组件是个宝藏,
Android 开发的四大组件分别是:活动(activity),用于表现功能;服务(service),后台运行服务,不提供界面呈现;广播接受者(Broadcast Receive),勇于接收广播;内容提供者(Content Provider),支持多个应用中存储和读取数据,相当于数据库。
这里主要学习,每个组件完成 Demo,知道使用方法,场景。startActivity() 、startService()、sendBroadcast() 、ContentProvider.query() 这些方法是一个引子,它是撬动你进入系统代码的一个个线索。
于是我们跟着这些方法,参考网上文档,使用调试技巧,开始分析,画流程图,当你把这些跟踪完了之后,你对系统就不会再陌生,也不会畏惧。
在这个过程里面,同步穿插着来学习 系统启动过程,System_server 进程启动过程,AMS 、WMS 、PhoneWindowManager 初始化过程。
这两个会同步进行,最终在系统框架汇合,你便将这个线路打通。而在这个应用和系统之间,是可以通过分析 SystemUI 和 Launcher 的启动过程,来掌握这些知识。
这些都掌握了,也就是主线已经打通,剩下的就是继续蔓延,将自己感兴趣的学习起来。比如 SF 学习绘制相关,Binder,SELinux 安全模型。
关于调试,主要是 调试 JAVA ,调试系统,调试 NDK ,调试 Smali
总结下学习过程,主要就是寻找线索(兴趣),持续行动(画流程),调试跟踪,总结收获。在工作中就是,处理一个问题的时候,需要使用三步法,分析,定位,解决。而你要成长起来,实际这个后面需要一个沉淀,这个很大程度我们会忘掉,所以才学得不牢靠。
最后,想再说说关于如何构建自己的知识体系,主要的方法为:
关于点线面,这里简单说下,
点线面的理论,就是寻找一个突破口,先进入市场,然后不断地积累,将点串成线,然后再深入下去,形成面。每一面起来之后,就是一个体系,你的能力矩阵就在这个框里面。
总分总针对的是学习新的知识,需要做的策略,先整体阅读概念,使用场景,以及它的优缺点,随后就是细分,开始实践,分为学习实例,掌握实例,应用实例,做出产品,最终再回到总结,加深对这个新的知识的理解,以便后续做别的产品,晓得是否这个新的知识可以直接应用。
这个总分总,就像人生三个境界:"看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水。"有句诗是这么说的,愿你走出半生,归来仍是少年。
关于成长思维,我们都听过一个段子,叫如何让一个技术群吵起来,就是扔一句话, PHP 是世界上最好的语言。然后就会出现各种不服,开始狂喷,相互 Diss 。这个属于调侃,也无可厚非。但我们时刻要保持着成长思维,也就是是否对自己成长有用。
比如争论这个,没用。看到一个人写的博客,写错了一点,就开始觉得自己比他牛,这个也是没用,因为这样思考你不成长的。成长思维,就像是个好奇宝宝,时刻谦卑地吸收,学习自己的不足,用来强大自己。
能看到别人的优点,这个也是看起来很容易,实际却很难。
不抬杠,认可别人的能力,诚恳的请教,这样子的你,才能以最优的方式成长。
感谢大家能耐着性子看完这篇文章
在这里小编分享一份自己收录整理的Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习
如果你有需要的话,可以点赞+评论+转发,关注我,然后私信我【进阶】我发给你