Android开发未来的出路何在

Android开发的现状

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

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

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

Android发展历程

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

下面我们来看一下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每个版本的更新情况。

Android开发未来的出路何在

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。H264、MP3、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开发未来的出路何在

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的整个技术架构图。

Android开发未来的出路何在
从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的未来在哪里呢/p>

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

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

  • 在Android领域深耕,做到极致,努力成为这个方向的专家,提升工程架构思维和能力,因为软件工程思想都是相通的。只要一个领域做到极致,即便Android被淘汰了,换新领域面试官依然会相信你也能做到极致。
  • 在有深度的情况下,适当拓宽自己的广度,在每完成一个项目后就进行总结,并能够熟知整个系统的整体架构,对核心有深刻的认知。

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

来源:xiangzhihong8

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年1月1日
下一篇 2020年1月1日

相关推荐