应用(客户端)开发、框架开发、驱动/系统开发的关系

87 阅读5分钟

编程语言:打个比方,我想写一本书,可以用中文,也可以用英文,还可以用俄文,等等。具体到做软件上,也有各种编程语言,目前主流的有C、C++、Java、kotlin、swift、Python、Go等。使用这种编程语言写出代码,机器就可以识别出让它做什么,各项功能也就跑起来了。每种语言都有自己的优势和劣势,都有自己的适用场景,所以没有哪一种语言是万能的。它们有的适合去驱动硬件工作,有的适合在浏览器里展示网页,等等。

Kotlin: 一种编程语言,目前主要用于编写Android应用软件。以前编写Android应用软件全都是用的Java语言,后来Android官方推出了Kotlin语言,作为Android应用开发的官方推荐语言。目前Java、Kotlin都可以开发Android应用,但大体趋势是Kotlin将会越来越占主流。嗯……其实已经是主流了。

Flutter: 一种跨平台的交互界面实现工具、应用开发方案。采用Dart编程语言。以前,在ios、android、windows、linux、网页等各平台上实现同一功能(例如,都是登录功能),需要在各平台上各自去实现一遍界面和交互,因为每个平台上的实现方式都不一样,所使用的编程语言也不一样,而使用Flutter可以做到使用Flutter实现一遍就可以在多种平台上都通用,这样就省去了很多精力和人力成本。一般互联网公司使用Flutter较多,而硬件公司相对来说就少一些,例如,Android手机厂商自己的软件,可能只会安装在自家手机上,不会在iPhone上安装,也就不用考虑跨平台的问题。

分层.png 应用开发(通常也叫客户端开发):日常手机上用的微信、QQ、美团、滴滴等这些APP都属于应用软件,可以简单理解为你可以在各手机厂家(含苹果)的应用商店里搜到的软件。从事应用开发的人最多。

Android Framework(框架层):android应用开发通常只涉及应用层的东西,而应用层的基础就是Framework,打个比方,Android应用层是省长,Framework就是市长,省长干活要调用市长,市长干活又要调用县长,一层层往下传下去,越往底下,就越接近真正干活的人,而最上面得到的结果都是底下反馈上去的。在大公司,Framework会有专门的Framework开发工程师。Framework可以认为是Android系统的一部分,通常需要自己修改(或者叫定制)Android系统的厂商才会需要Framework工程师,因为纯软件厂商无法(没有权限)修改Framework,打个比方,腾讯是没有办法修改vivo手机的Android系统的。但是熟悉Framework就可以更清晰地梳理清Android应用运行的机制,甚至想方设法绕过一些限制或根据framework的原理找到一些实现需求的方案,从而编写出更加优化的应用。部分人员可以兼通Android应用开发和Framework开发。

驱动开发、系统开发、底层软件开发:驱动、系统都是比Framework更靠底下的一层。一般这个职位,C、C++编程语言是必需技能,因为这两项都需要用这两种语言去实现。这个职位与Android应用开发基本完全不搭边,很少有人会兼通。如果是硬件厂家(典型为华米OV、大疆等)招聘WiFi、蓝牙、相机等相关的开发,大概率是对应着这一层。这类岗位的招聘里可能会较高频出现的词汇:驱动、底层、底层软件、HAL、C/C++。

硬件是驱动和系统的基础,系统是框架的基础,而框架又是应用的基础。以手机为例,每款手机采用的芯片不同,这就需要针对这款芯片做驱动和系统适配,这样才能驱动这块芯片跑起来,而驱动和系统改了,那框架也可能受到影响(例如支持了一项新功能,那就需要框架里也适配,这样应用层才能调用框架层,框架层再调用系统,系统驱动硬件),需要框架也跟着适配,框架修改就又导致应用也可能跟着适配,但是由于技术实现的问题,这种影响是逐级递减的,也就是说硬件变动了,但是这个影响传到应用层的时候可能已经毫无影响了(仅供非技术人员粗略理解,实际情况多种多样),典型场景:你换了一个新手机,把旧手机上微信的apk安装到新手机上,微信仍然可以正常使用。所以软件厂商就会把精力集中到应用(客户端)开发,硬件厂商则需要各层都关注。

综上所述:目前android开发工作基本分为三类,应用(客户端)开发、框架开发、系统开发,其中应用开发人数最多,也是各互联网大厂的主力(因为他们主要做软件),框架开发、系统开发则主要集中在华米OV为代表的硬件厂商,因为他们要根据自家的特色和需求去修改Android系统、添加各种硬件相关的功能。