Android开发将来的出路何在

Android开发的现状

目前,移动开发已经处于饱和的阶段,Android开发也不如当年盛况,已经再也不像前几年前那么火爆。正如一种编程语言若是经历过盛极一时,那么必然有这样的一条曲线,像咱们学的正弦曲线先急速上升,而后到达顶点,而后再降低,最后再趋近一个平稳的值。
能够看到,从2016年的下半年开始,移动互联网基本处于缓慢发展的阶段,不少大佬称之为互联网的下半场。若是移动互联网的前半场是粗放式的强地盘阶段,那么下半场就是守地盘的阶段,这一阶段,会出现众多的寡头。
在技术上,相比以前以前面试只问Android四大组件,数据库,网络和项目经验不一样,如今面试Android岗位会设计各类原理(包括系统的一些原理以及第三方库的原理及流程)、Android优化以及与Android相关的跨平台技术。除此以外,稍微大点的公司还会对App的用户体验、流畅度等等提出要求,因此说,Android的面试已经不可同日而语。html

关于Android的面试,能够参考我以前的文章:
Android开发初级中级高级怎么划分
史上最全的Android面试题集锦前端

从Android 1.0版本诞生至今,Android已经走过了10余年,这一路走来Android遇到哪些问题?大版本升级朝着什么方向演进?Android的将来如何?java

Android发展历程

先来看看Android系统的发展过程,从2008年发布Android 1.0系统,到2019年发布的Android 10.0系统,Android延续着每一年发布新系统的频率。每一年Android都会带来不少的系特性,特别是最近几年,随着Android对底层系统的优化,Android和iOS的差距愈来愈小。linux

下面咱们来看一下Android发布重要时间节点。面试

  • 2003年10月,Andy Rubin团队创办Android公司;
  • 2005年8月,谷歌收购Android公司,Andy Rubin担任谷歌工程部副总裁继续负责Android项目;
  • 2008年9月,谷歌正式发布Android 1.0系统;
  • 2011年1月,Android系统设备的用户总数达到了1.35亿,成为智能手机领域占有量第一的系统;
  • 2011年8月,Android手机占据全球智能机市场48%份额,并在亚太地区市场占据统治地位,终结了Symbian系统的霸主地位,跃居全球第一;
  • 2012年1月,谷歌Android Market已有10万开发者,推出超过40万应用;
  • 2013年11月,Android 4.4正式发布,系统更智能、UI更现代;
  • 2013年到2018年,这个阶段安卓进入飞速发展期,被升级的有摄像头、内存、机身、芯片等,原来的3.5寸小屏已退出历史舞台,全面屏、刘海屏、水滴屏已成为当下主流屏幕方案。

系统演进

无论是什么系统,必然会面临多个版本的迭代。做为目前最流行的移动操做系统之一,Android系统也历经10余年的迭代和更新,在用户体验、流畅性、续航、安全、隐私、机器学习等方面都取得较大的改进。下图演示了Android每一个版本的更新状况。
在这里插入图片描述图中是每一个大版本中最具表明性的特征标记在图中,并不表明着该版本所有特征,一样专项计划也不是只在某一个版本执行,好比续航和性能优化,每个版本都在持续改进中,Treble计划也一直在迭代至今。下面,咱们来看一下Android历个版本的更新状况。数据库

Android 1.0到Android 4.0,系统各项功能和特性迭代到一个较完善的阶段。编程

Android 4.1系统,Google开展了黄油计划(Project Butter),为了让Android系统摆脱UI交互上的严重滞后感,但愿能像“黄油”同样顺滑。 核心原理是系统框架中的渲染和动画统一采用垂直同步技术(VSYNC),以及三重缓冲技术(Triple Buffer),让滑动、翻页等操做更加一致与顺滑。浏览器

Android 4.4系统,Google开展了瘦身计划(Project Svelte),力求下降安卓系统的内存使用,解决低端机型升级难的问题,让Android 4.4可正常运行在全部Android手机,从而减小安卓系统继续碎片化。UI设计上,支持新的“沉浸式模式”,用户界面由过去的黑色与蓝色为主的色调转向带有透明度的浅色系,视觉语言变得更加明亮与现代化。安全

Android 5.0系统,Google开展了伏特计划(Project Volta),力求提高续航能力,这方面Google落后于业界厂商,厂商直面用户对续航尤其迫切,每每系统资源管控更为严格。另外,系统采用全新的ART,抛弃Dalvik虚拟机,大幅提高运行效率。UI设计上,使用全新的扁平化Material Design设计风格,更加清新与质感的设计,统一Android设备的外观和使用体验。性能优化

Android 6.0系统,Google引入新的运行时权限,让用户可以更好地了解和控制权限;引入了Doze模式,进一步提高电池续航能力。UI设计上,新增夜间模式,大幅改进通知栏,让通知更简洁。

Android 7.0系统,引入新的JIT编译器,对AOT编译器的补充,可节省存储空间和加快更新速度;进一步优化Doze唤醒机制;UI设计上,支持分屏功能。

Android 8.0系统,Google开展了计划(Project Treble),从新架构Android,将安卓系统框架与Vendor层解耦,力求完全解决安卓碎片化这一老大难的问题,这是安卓系统架构最大的变化。系统层面增强对后台服务、广播、位置的管控限制。UI设计上,改进通知栏,智能文本选择和自动填充功能。

Android 9.0系统,引入神经网络API,采用机器学习的思路来预测用户使用习惯来作省电优化,继续强化Treble计划;文件系统(sdcardf/F2FS)持续提高;私有API的限制进一步规范化Android生态,强化隐私和安全,硬件安全性模块以及统一辈子物识别身份验证界面。 UI设计上,新的手势导航,增强支持刘海屏,UI搜索界面使用到机器学习,AI正在逐步强化Android系统。

Android 10.0系统,Google开展了主线计划(Project Mainline),相关模块(Modules)不容许厂商直接修改,只能由Google应用商店来更新升级,强化用户隐私、系统安全与兼容性,支持脸部生物识别。

Android系统架构

无论Android系统如何升级,可是Android的总体架构是基本没有改变的,即从上到下能够分为应用程序层、 应用框架层、系统运行库层和Linux内核层,以下图所示。
在这里插入图片描述

1, 应用程序层

顶层中有全部的Android应用程序,包括通信录、浏览器等,你写的应用程序也被安装在这层;全部的的应用程序都是使用Java语言编写的。

2,应用框架层

这一层主要提供构建应用程序是可能用到的各类API,Android自带的一些核心应用就是使用这些API完成的,开发者也能够经过使用API来构建本身的应用程序。

  • 活动管理者(Activity Manager):控制应用程序生命周期和活动栈的全部方面
  • 内容提供器(Content Providers):容许程序之间发布和分享数据。
  • 资源管理器(Resource Manager):提供对非代码嵌入资源的访问,如字符串、颜色设置和用户界面布局。
  • 通知管理器(Notification Manager):容许应用程序显示对话框或者通知给用户
  • 视图系统(View System):一个可拓展的视图集合,用于建立应用程序用户界面

3,系统运行库层

程序库

Android包含一些C/C++库,这些库能被Android系统中不一样的组件使用。他们经过Android应用程序框架为开发者提供服务,如下是一些核心库:

  • 系统C库(libc):一个从BSD继承来的标准C系统函数库,他是专门为基于embedded linux的设备定制的媒体库(Media Framework):基于Packet Video opencore; 该库支持多种经常使用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括 MPEG4。H26四、MP三、AAC、AMR、JPG、PNG。
  • Surface Manager:对显示子系统的管理,而且为多个应用程序提供了2D和3D图层的无缝融合。
  • SGL:底层的2D图形引擎。
  • 3D libraries:基于OpenFLES1.0 APLs实现,该库可使用硬件3D加速或者使用高度优化3D软加速。
  • FreeType:位图(bitmap)和矢量(vector)字体显示。
  • SQLite:一个对于全部应用程序可用,功能强劲的轻型关系型数据库引擎。

Android运行库

Android包括了一个核心库,该核心库提供了Java编程语言核心库的大多数功能。

每个Android应用程序都在它本身的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备能够同时高效地运行多个虚拟系统。Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该个税文件针对小内存使用作了优化。同时虚拟机是基于寄存器的,全部的类都经由java编译器编译,而后经过SDK中的”dx”工具转化成 .dex格式由虚拟机执行

Dalvik虚拟机依赖于linux内核的一些功能,好比线程机制和底层内存管理机制。

4,Linux内核层

Android系统基于Linux2.6内核,这一层为Android设备各类硬件提供了底层驱动,如显示驱动,音频驱动,照相机驱动,蓝牙驱动,WIFI驱动,电源管理等

Android系统碎片化

Android历经10余年的迭代,在流畅性、内存、续航、安全、隐私等方面都取得很大的进步,但Android系统的碎片化一直是痛点问题,带来不一致的用户体验。

Android的开放性,是其长久发展的主要缘由,让大多数的厂商都选择Android系统,但开放性的背后是碎片化,从Android诞生至今问题就一直存在,Google一直在努力从技术角度来解决碎片化问题。从Android 8.0提出Treble项目,从新架构系统将system与vendor解耦合,用于加快Android新版本的适配,效果并不明显,Google继续在后续的Android P以及Android Q一直在竭尽全力地持续完善Treble项目,力争加快系统升级速度。

在这里插入图片描述
Android系统碎片化,让安全、隐私问题存在风险,且存在体验不一致性问题,但老版本手机的OTA维护升级对厂商来讲成本是昂贵的,Google感受到对Android系统掌控力度不足,要想完全改变,除非不让各大厂商定制化,这势必致使Android手机彻底同质化,手机厂商就无法玩了,等于自掘坟墓,Google确定不会这么干。因而,Google在Android 10.0提出了”Project Mainline“,将对隐私、安全、兼容性形成重大影响的少数模块独立成module,每一个module打包成APEX格式(一种相似于APK的新格式),由Google经过应用商店按期来升级,从而保证低版本的手机不会由于碎片化而得不到隐私、安全与兼容性的更新。

这些module是由Google维护的主线,各大厂商只能跟Google沟通并将代码upstream到AOSP主线。Google花费了大量的人力在努力完善并推行Mainline,Google但愿统一管控的机制,厂商但愿最大的自由定制空间,这是一场有趣的角逐,笔者跟团队一块儿跟Google协商落地module的落地计划,最终将某些module影响较大模块争取Android 11再上线,Mainline更新机制以下图。

在这里插入图片描述

Android应用开发演进

Android系统离不开各App来提供丰富的功能,下面再来讲一说应用开发涉及的一些技术演进。

移动端跨平台技术

从最开始以Cordova为基础(依赖于WebView)的Hybrid混合开发技术,到React Native的桥接(将JS转为Native)的技术,再到最新的Flutter技术,都说明如今移动端在多端开发中的尝试。
Flutter是Google发布的全新的移动跨平台UI框架,渲染引擎依靠跨平台的Skia图形库来实现,依赖系统的只有图形绘制相关的接口,能够在最大程度上保证不一样平台、不一样设备的体验一致性,逻辑处理使用Dart语言,执行效率比JavaScript高。另外,Google内部正在开发的另外一个操做系统Fuchsia的UI layer采用的是Flutter,也就是说Flutter自然能够支持Android、IOS以及将来的Fuchsia。在大前端方向,对于跨平台开发中一直在不断迭代中寻找更好、更优的解决方案,目前来看Flutter仍是更有优点。

跨平台相关的内容能够参考:移动跨平台技术方案总结

应用架构

所谓软件架构(Software Architecture),是指软件开发过程当中涉及的一系列抽象模式,用于指导大型软件系统各个方面的设计,软件架构是构建计算机软件系统的理论基础。在Android开发中,前后提出了MVC、MVP和MVVM等软件架构模式,这些软件架构模式为Android项目开发提供了理论基础。

MVC模式(Model–view–controller)但Activity类过于臃肿,为解决这个问题,有了MVP(Model–view–presenter),presenter不只要操做数据,并且要更新view;再到MVVM(Model-View-ViewModel)解决了MVP大量的手动View和Model同步的问题,提供双向绑定机制。

热修复与插件化

所谓热修复,指的是为了修复线上问题而提出的修补方案,程序修补过程无需从新发版!热修复的主要应用场景是为了让用户无感得修复线上缺陷,好比Tinker,Andfix,Sophix等。
插件化则是为了减小模块耦合,可减小主程序的规模,可按需加载,好比DroidPlugin,OpenAtlas等。关于各个热修复与插件化的细节再也不展开,这里就说一点,Android 7.0对Native的NDK的调用限制是手铐,尤为是Android 9.0对Java层SDK的调用限制就是脚铐,那么对于Android应用想再搞插件化之类的黑科技即是带着脚手铐跳舞,能跳但舞姿可能不太美观。

关于热修复能够参考:
Android热修复技术总结
Android 热修复框架比较

关于插件化则能够参考:
深刻理解Android插件化技术
Android插件化常见冲突解决
Android 插件化的Hook方案
携程Android App的插件化和动态加载技术剖析
蘑菇街Android组件化与插件化
Android 插件化之ClassLoader详解

App动态化框架

随着应用不断演讲,功能愈来愈复杂,且应用针对不一样屏幕设备、不一样国家语言资源都打包在同一个App,致使应用包不断增大,据统计自2012年以来应用包大小增加5倍。虽然如今手机的存储空间愈来愈大,但用户照片、视频等媒体文件品质在逐渐提高,致使设备可用空间逐渐紧缩。为此Google在去年Google I/O大会讲述Android引入新的App动态化框架(即Android App Bundle,缩写为AAB)。利用Split Apk完成动态加载,使用AAB动态下发方式,可显著缩小应用体积,减小对存储空间的占用。

App Bundle相关的内容能够参考:
Android动态化框架App Bundles简介

Kotlin

Kotlin是Google推荐的官方静态编程语言,与Java互通,可相互转换。Kotlin编译成Java字节码,也能够编译成JavaScript,运行在没有JVM的设备上,简洁安全。使用Kotlin更快速地编写Android应用,能够提升开发者的工做效率,少编写样板代码,被称之为 Android 世界的Swift。
谷歌开发者社区作过一个问卷调查,大概有50%的Android开发者已使用过Kotlin。这里并不是鼓励你们必定都要使用Kotlin,学习新语言就像一次投资,要权衡团队成本与收益之间的利弊。若是你是一位原生Android开发,那么掌握Kotlin将是你必须掌握的技能。做为一名移动开发老兵,笔者在2018年出版了一本《Kotlin入门与实战》,Kotlin简洁的语法至今令我印象深入。

Fuchsia

Fuchsia,是由Google公司开发的继Android和Chrome OS以后的第三个系统,已在Github中公开的部分源码能够得知。不一样于安卓使用的Linux内核,Fuchsia采用的比较新的Zircon的内核。该系统与当下Android相比,不管是存储器仍是内存之类的硬件要求都大幅下降,能够看出这是一款面向物联网的家用电器用的系统。据悉Flutter引擎+Dart语言将颇有可能成为Fuchsia系统主要的UI开发框架。谷歌Fuchsia选择Flutter做为UI并不使人意外,毕竟Dart语言由谷歌亲生,一方面不用担忧被人起诉,另外当Fuchsia有须要时,也能灵活地在Dart虚拟机作出针对性的改变。

Fuchsia会是Android的终结者吗? 笔者认为至少将来三五年内不太可能取代Android。当年为了和苹果iOS抗衡,Android系统研发做为Google重中之重,在这种状况下,Android诞生依然花费了Google 3年时间。而Fuchsia只是公司目前的实验项目,且Fuchsia并不是基于业界成熟Linux内核,而是采用全新Zircon内核,项目工程路还很远。下面是Fuchsia的整个技术架构图。在这里插入图片描述
从Fuchsia技术架构来看,内核层zircon的基础LK是专为嵌入式应用中小型系统设计的内核,代码简洁,适合嵌入式设备和高性能设备,好比IOT、移动可穿戴设备等,目前这些领域标准化级别的垄断者。以及在框架层中有着语音交互、云端以及智能化等模块,由此笔者揣测将来Fuchsia率先应用在音控等智能设备。

Fuchsia基于功能的模块化操做系统,应该会使各组件模块能独立升级更新能力,保证体验一致性。Fuchsia在IOT领域占据必定份额后,加之其良好的跨平台,能够再逐步渗透到移动手机、笔记本电脑等设备,进而三位一体,打造手机、电脑与IOT完美的互联互通的统一平台体验,让多端设备都离不开Fuchsia。在2018年10月,在“蓝牙特别兴趣小组(Bluetooth SIG)”举办的UnPlugFest(UPF)测试大会上,Google再展现了Fuchsia与Android设备的互联性,能够窥见一斑。Fuchsia的定位是物联网,相信随着5G时代的到来,Fuchsia将可能一统江湖。不过,目前来看,Fuchsia还有至关长的路要走。

Android开发的将来

移动操做系统的演变过程,从按键交互的塞班功能机到触摸屏交互的Android/IOS智能机,从小屏幕手机到全面屏、刘海屏、水滴屏。总结一下,任何系统无非干两件事:输入和输出,接收到外部输入信号后通过操做系统处理后输出信息。

Android发展至今,已成为全球用户量最普遍的移动操做系统,手机行业竞争异常激烈,通过几番洗牌,国内手机厂商主要是华米OV四大公司,而且随着移动互联网增加见顶,国内Android开发的需求也愈来愈少,那么Android的将来在哪里呢?

目前,Android在应用层次的发展已经见顶,将来的发展主要集中在人工智能和5G结合的产业,智能汽车、智能家居、IOT都将是Android发展的广阔市场。但就目前人工智能的奇点还没到来,技术还处于前期阶段,一旦奇点来临将会爆炸式发展,或将从新定义生活方式。汽车的智能化和互联网化是将来一大趋势,Google这两年确实在汽车领域发力,Android Auto在过去一年的用户增加250%。天生的移动特性加上愈来愈多的互联网服务需求,汽车须要一个具有多种感知能力的系统,或将成为是继手机、电视后Android的下一重点开拓领域。

对于Android开发人员来讲,我有如下几点建议:

  • 在Android领域深耕,作到极致,努力成为这个方向的专家,提高工程架构思惟和能力,由于软件工程思想都是相通的。只要一个领域作到极致,即使Android被淘汰了,换新领域面试官依然会相信你也能作到极致。
  • 在有深度的状况下,适当拓宽本身的广度,在每完成一个项目后就进行总结,并可以熟知整个系统的总体架构,对核心有深入的认知。

关于做者:做为一名移动开发老兵,我从11年开始从事移动开发,从业的时间基本见证了Android的诞生、成长、成熟到如今的稳定。而且,从16年开始,我更多的时间是专一在移动跨平台和移动架构上,也出版了诸如《React Native移动开发实战》、《Kotlin入门与实战》,《Weex跨平台开发实战》和《React Native开发进阶》等移动开发的书籍。将来我还将深耕在移动开发中,不过更多的是关注移动开发的效率和质量方面,由于移动开发须要的是沉淀。

相关文章
相关标签/搜索