浅谈Android开发跟framework开发的区别

3,358 阅读7分钟

最近有许多小伙伴咨询关于framework开发跟Android开发的区别,本人就以自己实际工作经历来谈谈这两者的区别,首先要明确一点,文中所说的Android开发指的是Android App开发,framework开发指的是Android framework开发。

Android架构中所处位置的区别

Android架构图.png

  • Android开发

    根据Google给出的官方架构图,Android开发处于Android架构的System Apps层,像拨号盘,日历,相机,邮件,设置等,但这些app属于系统app,系统app本质上跟第三方app没什么区别,只是最终存放在Android系统中的位置不同,系统app存放在/system/priv-app/和/system/app/中,第三方app存放在/data/app/当中,这三个目录的权限不一样,按照权限大小排序分别为,/system/priv-app/ > /system/app/ > /data/app/

    系统app-1.png

    系统app-2.png

    第三方app

  • framework开发

    framework开发处于Android架构的Java API Framework(俗称java framework)、Native C/C++ Libraries(俗称native framework)、Android Runtime这三层,这三层的作用是实现Hardware Abstraction Layer(HAL,俗称硬件抽象层)的接口并向系统应用层提供api方法和服务,上层所使用的各种View以及通过Context.getSystemService()获取的各种服务都是framework提供的

工作内容的区别

  • Android开发

    主要工作内容是根据产品经理的功能需求和设计师绘制的UI图完成从0到1的开发,或者接手别人的项目完成版本功能的更新迭代,维护,甚至还需要完成上架。

  • framework开发

    framework的工作内容有很多种,主要包括系统定制、系统裁剪、系统漏洞修复、系统优化

    • 系统定制

      类似于做一个MIUI之类的深度定制系统,这里面的工作内容非常多,有系统app的开发,第三方app集成、framework api的增删改,此工作内容的难度也是最大的,尤其是对framework api的增删改,需要对api的执行流程和原理非常清楚

    • 系统裁剪

      有些应用场景是不需要Android系统全部的功能的,比如车载系统一般不需要SIM卡,那么就可以将SIM卡相关的硬件、驱动、服务、应用全部裁掉,裁剪系统功能不仅可以缩小系统体积,还可以增大系统可用内存,提高系统的流畅性。

    • 系统漏洞修复

      这里的漏洞修复并不是Android原生的漏洞,而是芯片厂商嵌入自己的硬件之后引发的framework层的问题,比如高通在自己的芯片上集成Android系统,必须修改Android原生代码才能在自己的硬件上运行起来,底层功能变动会导致上层功能变动,从而引发未知问题,测试负责测出这些问题,当然需要专门的测试仪器和测试方法,然后不同的问题交由不同的开发者来处理,本人目前的工作内容就是这些

    • 系统优化

      优化的目的是为了保持系统的稳定性,因为底层代码修改之后会导致系统极其不稳定,崩溃,死机,无法开机、耗流过高等问题。对于一些低配芯片,优化也可以提高系统的流畅性。

工作节奏不同

  • Android开发

    主要是实现新功能,再加上无穷无尽的迭代版本排期,所以大部分的时间用于写码上面,甚至加班加点的去赶进度,侧重于代码的writing,节奏是比较紧凑的

  • framework开发

    主要是根据问题现象,有目的地阅读对应模块的源码,梳理流程,弄清原理,然后找出问题的根源所在,有时候一个疑难问题从硬件转到驱动,再转到framework,需要花几个月的时间才能处理掉,侧重于代码的reading,节奏相对于是比较轻松的,一杯茶,一包烟,一个bug改几天,一点儿不假

工作方式不同

  • Android开发

    基于Windows+Android Studio+小米/华为/oppo/vivo手机

  • framework开发

    基于windows+ubuntu+AndroidStudio+xshell+samba+Android10/Android11/Android12/Android13的模组,因为AOSP只能在linux下才能编译,而linux又不适合办公,所以工作中使用了两台电脑,windows用于办公,ubuntu用于编译,而windows又通过xshell+samba远程访问ubuntu,稍微比Android开发繁琐一点

产物的区别

  • Android开发

    Android项目编译生成的产物为apk文件

  • framework开发

    AOSP编译生成的产物为.img系统镜像文件

所需技能的区别

对比一下最新的招聘要求

  • Android开发

    Android招聘要求.png

  • framework开发

    framework招聘要求.png

可以看出,Android开发重在技术的广度,结合前端快速实现功能,framework开发重在技术的深度,需要掌握底层原理

薪资待遇的区别

这个不解释,直接上图,结果均取自2023年2月份某直聘上海的前几条结果

  • Android开发

Android待遇.png

  • framework开发

framework待遇.png

可以看出,无论是底薪还是天花板,framework开发均高于Android开发

职业生命周期不同

这个为本人个人观点,不喜勿喷

  • Android开发

    按照一个普通应届生23岁毕业来算,入行7年,到了30岁,职业生涯就开始走下坡路了,身体根本无法跟年轻人抗衡,本人今年30岁,已经深感加班熬夜已经干不过那帮年轻人了,晚上加班必须咖啡续命。并且企业在招聘选择上,宁愿用低成本招一个两三年经验能干活的,也不愿意招一个上十年经验漫天要价的,应用开发的性质就是这样,并不是越老越值钱,它的巅峰期很短,只要能干活儿,能完成任务,完全没必要招老手,而且新人也容易管理一点。

  • framework开发

    相对于Android开发,framework开发的职业周期就稍微长一点,一个是因为Android开发可以转到framework开发(虽然framework开发也可以转Android开发,但应该没人这么干吧),相当于是Android开发的延续。第二、能招framework岗位的企业一般都具有一定的规模,不用担心因公司倒闭而失业,可以放心大胆的去干。第三,framework开发的身价跟工作时间是正相关的,因为Android系统比较庞大,需要花费大量时间去啃,所以前几年一直都处于学习成长期,这个岗位需要经验的积累,工作的沉淀,而且后续如果还想继续干下去的话,可以继续深入底层,往驱动,硬件这一块发展,或者选择framework里面的某个方向深入研究,成为这个领域的专家,比如wifi、蓝牙。可以说生命周期非常长,我身边现在的同事,很多都是各个领域的大佬,每年都会申请专利,尔等菜鸟只能膜拜,恰逢今天公司举办2022颁奖典礼,贴一波图。

颁奖典礼.png

说这些并不是说Android开发比framework开发low,而是想表达framework开发是Android开发转型的一种选择,如果你Android开发做得很好,能被企业所需要,那也是很厉害的,但如果你只是茫茫Androiders中普通的一员,那么请仔细想想自己的职业规划该怎么走吧。

如果你对framework开发有兴趣,关注我,或许我能帮助到你

我是如何从Android开发转framework开发的

framework学习路线和方法

framework开发环境搭建

Android源码的下载,编译,刷机

Android Studio导入Android源码

Android源码目录结构介绍

一篇文章教你完全掌握jni技术

Android 11 文件复制流程

Android Q Wifi开启流程

Android 10 USB用途切换失败分析

MediaPlayer的核心-NuPlayer

OK,就聊这么多,我要去现场膜拜大佬了。