0%

Android

日益趋同。

安卓学习路线图

Why

安卓的后花园起火了

早前据路透社报道,小米、OPPO 和 vivo 三家国产手机公司,合作打造全新的平台,提供给海外开发者提供内容分发。这个新平台,名字为“环球开发者服务联盟” (Global Developer Service Alliance, GDSA)。路透社采访了部份的分析师,他们指这举动是要挑战 Google Play 应用商业的领导地位。

中国市场:Google 的黑洞

一直以来,手机厂商免费使用 Android 作为产品的作业系统,但 Google 在 Android 系统里并非没有好处。Google 通过 Android 获利方式,并不是在产品本身,而是产品背后的一系列运作,包括:

  1. 虽然 Android 是免费的,但 Google 为手机配套的相关服务 Google Mobile Service (GMS) 需要收费,当中包括手机机的推送服务、各种 Google API、Gmail、Google Maps、和最核心的 Google Play 商店;

  2. Android 手机上的移动广告收入;

  3. 通过 Androd 手机,取得用户使用习惯的精准数据,进一步改良广告推送能力。

根据路透社转引Sensor Tower分析师 (Katie Williams) 的说法,2019年 Google 从全球 Google Play 商店获得了约 88 亿美元的收入。但是,Google 在中国难以实现上述操作,甚至可以说中国的 Android 手机业务,与 Google 没太大关系。


智能手机的全球份额。图片来源:IDC

在中国的 Android 手机,绝大部份均没有 Google Play,即使这些手机有使用部份的 GMS 接口,但 Gmail、Google Maps、Google Docs 等应用一直欠奉。由于中国已经成为 Android 其中一个最大的市场,而中国手机生产商,也占了 Android 手机生产商接近一半的份额,但 Google 没有这些份额里获得太多好处。

所以 Forbes 就曾指出,中国市场是 Google 的“巨大黑洞” (Giant black hole),这也是 Google 一直力争重回中国的最大原因。但没想到 Google 在回到中国之前,却遭到中国手机公司的强力挑战。

这个国产手机联盟里,并没有华为在内

但这个 GDSA 平台其实是什么玩意?为什么说这举动是要挑战 Google Play 应用商业的领导地位?

我们首先看看这个联盟的成员。消息源头的路透社明确写出,华为在 GDSA 联盟之内,但我们在官网上并没有找到华为的名字(下图),我们向华为查询,华为发言人也表示,GDSA 与华为并没有关系。


图片来源:GDSA。

华为去年被列入实体名单后被 Google 断供系统,无法再使用 GMS 和 Google Play 商店。尽管中国地区的 Android 手机,向来都没有使用 GMS,但欧美地区仍然极度依赖 Google 服务,手机厂商无法使用 Google Play 商店,还是会带来伤害。据消息指出,对 2019 年 Q2 的欧洲业务带来不少的影响,这也是一众媒体把华为列作 GDSA 参与者的最大原因。

但是,华为目前并不在这个联盟里,我们也无法知道华为是否想参加 GDSA 联盟,也不清楚联盟是否有意与华为合作。

诚然,去年华为被列入实体名单后,改为实行“渡江战役”,狂攻国内市场,并把国内的份额增加至 50% 以上。华为在国内的份额增加了,同样是国产品牌的 OPPO、vivo 和小米三家在国内的份额,在国内就被打得溃不成军,所以华为和他们之间的市场竞争,日趋剧烈。

有趣的是,根据 Slashgear 的资料,OPPO、vivo 和小米这三家公司近月愈走愈近。他们 3 家在一月就已经结成了一个类似苹果 AirDrop 的近场无线通信标准的同盟,同样地,这个联盟里也没有华为。

这个国产手机平台,并不包括中国在内

那这 3 家手机公司合作推动 GDSA,目的又是什么?

路透社曾向几家手机公司查询,只有小米回应指“GDSA 单纯只是帮助开发者,把应用同时轻松上传到小米、OPPO 和 vivo 三家应用商店。这平台并不是要与 Google Play 商店竞争”。”Odin 也曾向 vivo 查询,他们也表示:“GDSA 旨在为开发者提供便捷的应用程序上传工具,使用该工具,开发者可以通过一次上传,让应用程序在vivo、OPPO和小米三家商店中得到展示和推广。

毕竟 OPPO、vivo 和小米 3 家均各有其应用商店,能同一时间上传到 3 个商店,这的确是一个很便利开发者的设计。但这会对 Google Play 商店构成竞争关系吗?始终 Android 是个开放的平台,不少使用 GMS 的手机,也同时有自家的应用商店,这十分常见。

而在 GDSA 的官网上,没有说明使用 GDSA 平台的手机,是否不能预载 Google Play 商店,也没有清楚解释开发者在 GDSA 的分成机制,亦没有说明合作品牌在 GDSA 是怎样合作和分成。所以在目前而言,我们仍无法判断这个平台,与 Google Play 商店之间会带来多少影响。


图片来源:GDSA。

然而,如果仔细看 GDSA 的支持地区(上图),却能见到最诡异是:这个平台目前不但不支持上传中国地区(国产手机没有 Google Play 商店,各个手机品牌均在使用自己的应用商店),反而只支持能使用 Google Play 商店的新兴市场,偏偏这个平台,并不同时支持上传到能统一上传和下载的 Google Play 商店。

Google 的弱点在新兴市场

GDSA 没有支持最需要同时上传的地区,反而支持了本来就能使用 Google Play 统一上传和发售的地区,这代表了 他们是想鼓励开发者更多地把应用上传到这 3 家应用商店,而当中不包括中国地区(中、港、台)和欧美地区。换言之,他们只是想鼓励印度、东南亚、俄罗斯等新兴市场的开发者,更多地把应用上传到自家商店。

无巧不成话,在去年年底就有消息指,华为就在印度布署 GMS 的替代品,“华为移动服务”系统 (Huawei Mobile Services, HMS)。同样在这两天,OPPO、vivo 和小米也推出 GDSA,而且也是主攻以印度为主的新兴趣场。

简言之,他们都觉得在新兴市场上力推 Google Play 的代替品,比起在欧美地区更为容易。


印度的智能手机渗透率。图片来源:eMarket。

举例说,印度智能手机的渗透率本来就不怎么高(上图),即使用户拥有智能手机,很多也只是不太好用的低端手机,所以他们根本不怎样习惯使用智能手机,更不要说依赖 Google 移动服务。也有的新兴市场像俄罗斯一样,用户宁愿选择本地公司 Yandex 提供的服务,而不愿使用 Google,这样使新兴市场的用户,更不在乎是否有 Google 的服务。

新兴市场对 Google 服务的依赖程度相对更低,为国产手机提供大量“去 Google 化”的空间。

Google 的后院起火了

Google 在华为被列入实体清单后,曾警告指这样对美国更为危险,其中一个原因,是担心中国手机公司会发展自己的软件。华为的鸿蒙作业系统,也许就是实体清单所带来的结果,但目前为止,还未有一台市售的手机用上鸿蒙,所以华为的新作业系统,对 Google 的影响十分有限。

但如果 GDSA 平台能实际推广起来呢?那就完全不同了。

印度手机市场份额。图片来源:Canalys

欧美地区的智能手机市场早以饱和,而中国的智能手机市场也差不多见顶,所以,近年各大小厂商都把发展目标转移至包括印度、巴西和俄罗斯等新兴市场。可是,如果说中国手机品牌的份额,在全球并不算得上是什么,但在印度市场里,GDSA 联盟里的 3 个手机厂合共占了接近 80% 的份额(上图,注意:Realme 是 OPPO 的子公司)。

由于新兴市场用户,对 Google 服务的依赖性较低,如果这 3 家手机厂真的有意要“去 Google 化”,那很可能导致新兴市场这个潜力巨大的市场,再次变成 Google 的另一个黑洞。换言之,尽管 Google 能在欧美地区的市场继续呼风唤雨,但中国手机厂商却在他们的后花园里点起了火头。

新的黑洞正在蕴酿

国产手机厂经历“华为被列实体名单”,难免心有余悸。正如华为会准备鸿蒙作业系统作为备胎,其它国产手机品牌也自然要多做准备,应付未来无法使用 GMS 的场景,Google 这个的黑洞,就此慢慢蕴酿起来。更何况国产手机公司早就知道,这些服务都有很强的吸金能力,如果真的能把开发者的应用全收到自家商店,更是赚大了。

但由于目前 GDSA 的细节尚未清晰,所以 Odin 仍然无法判未来新兴市场的 Android,是否会被 GDSA 成功“去 Google 化”:他们是会通过强制手段,让开发者不能使用 Google 服务?还是在使用 Google 服务的同时,培养自家的应用商店与之竞争?毕竟,Google 的技术团队仍然强大,GMS 服务甚具竞争力,GDSA 真的要和他们竞争起来,结果还是难以预料。

但如果贸易战波及其他手机厂商,那就等于强制国产手机厂加速“去 Google 化”。以目前中国手机在新兴市场的份额,以及新兴市场用户的使用习惯来说,Google Android 就难免卷进这个的黑洞了。

What

Android技术架构演进与未来

引言

众所周知,Android是谷歌开发的一款基于Linux的开源操作系统,每年迭代一次大版本升级。 小米、华为、OPPO、VIVO、三星等各大厂商对Android原生系统进行二次开发衍生出具有各家特色的系统(比如MIUI),为手机、电视、平板电脑、手表等数十亿设备提供平台支持,使得Android作为全球最受欢迎的移动操作系统。Android诞生至今已有10余年,这一路走来Android遇到哪些问题?大版本升级朝着什么方向演进?Android的未来如何?

  1. 发展历程

先来看看Android系统的发展过程,从2008年发布Android 1.0系统,直到2019年即将发布Android 10.0系统,下面列举些重要的时间节点。

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寸小屏已退出历史舞台,全面屏、刘海屏、水滴屏已成为当下主流屏幕方案。

  1. 系统演进


系统演进趋势:每个Android大版本的更新迭代前行,历经10余年,在用户体验、流畅性、续航、安全、隐私、机器学习等方面都取得较大的改进。图中是每个大版本中最具代表性的特征标记在图中,并不代表着该版本全部特征,同样专项计划也不是只在某一个版本执行,比如续航和性能优化,每一个版本都在持续改进中,Treble计划也一直在迭代至今。

从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应用商店来更新升级,强化用户隐私、系统安全与兼容性。支持脸部生物识别。

系统不断演进,但整体架构基本没有改变,如下图所示。

  1. 碎片化

Android历经10余年的迭代,在流畅性、内存、续航、安全、隐私等方面都取得很大的进步,但Android系统的碎片化一直是痛点问题,带来不一致的用户体验。Android的开放性,是其长久发展的主要原因,让大多数的厂商都选择Android系统,但开放性的背后是碎片化,从Android诞生至今问题就一直存在,Google一直在努力从技术角度来解决碎片化问题。从Android 8.0提出Treble项目,重新架构系统将system与vendor解耦合,用于加快Android新版本的适配,效果并不明显,Google继续在后续的Android P以及Android Q一直在不遗余力地持续完善Treble项目,力争加快系统升级速度。如下图,目标是希望在保持Vendor不变的情况下,可以独立升级System模块。

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更新机制如下图所示。

  1. 应用演进

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还是更有优势。

应用架构: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应用想再搞插件化之类的黑科技便是带着脚手铐跳舞,能跳但舞姿可能不太美观。

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

Kotlin:是Google推荐的官方静态编程语言,与Java互通,可相互转换。Kotlin编译成Java字节码,也可以编译成JavaScript,运行在没有JVM的设备上,简洁安全。使用Kotlin更快速地编写Android应用,可以提高开发者的工作效率,少编写样板代码,被称之为 Android 世界的Swift。谷歌开发者社区做过一个问卷调查,大概有40%的Android开发者已使用过Kotlin。这里并非鼓励大家一定都要使用Kotlin,学习新语言就像一次投资,要权衡团队成本与收益之间的利弊。

  1. Fuchsia

2016年开始,Google有一群超过百人的工程师团队秘密研发一款名为Fuchsia的新系统,该团队很豪华,有来自Android、iPhone、WebOS、Chrome、Flutter等核心工程师,这么多优秀的人在一起研发这个项目,的确值得期待。Fuchsia的内核采用Zircon,UI层采用Flutter框架,底层渲染Escher,支持Vulkan作为底层Graphics API。

提到Vulkan,顺便说一下,去年笔者在美国跟Android团队讨论到并问及Vulkan未来的规划,Google表示未来几年会大力推广Vulkan技术,Vulkan是一种跨平台的高性能低开销的图形接口,在移动设备上比OpenGL ES有着更出色的表现。Vulkan将会是未来Android平台的一个发展方向,尤其是游戏领域,比如王者荣耀Vulkan版本。

在2017年5月,Google的Android工程副总裁Dave Burke称Fuchsia是早期实验项目,而在谷歌内部有很多这类实验项目,存在很大未知变数。2017年11月,Google研发人员表示Fuchsia支持Swift,足见打造统一操作系统的野心。在过去的Google I/O大会只字未提及Fuchsia,Google官方回应不清楚Fuchsia会在出现在什么设备。

Fuchsia会是Android的终结者吗? 笔者认为至少未来五年内不太可能取代Android。当年为了和苹果iOS抗衡,Android系统研发作为Google重中之重,在这种情况下,Android诞生依然花费了Google 3年时间。而Fuchsia只是公司目前的实验项目,且Fuchsia并非基于业界成熟Linux内核,而是采用全新Zircon内核,项目工程路还很远。

笔者大致研究了一下Fuchsia系统源码,总结了一下Fuchsia的整个技术架构图如下。

从Fuchsia技术架构来看,内核层zircon的基础LK是专为嵌入式应用中小型系统设计的内核,代码简洁,适合嵌入式设备和高性能设备,比如IOT、移动可穿戴设备等,目前这些领域还没有标准化级别的垄断者。以及在框架层中有着语音交互、云端以及智能化等模块,由此笔者揣测未来Fuchsia率先应用在音控等智能设备。

Fuchsia基于功能的模块化操作系统,应该会使各组件模块能独立升级更新能力,保证体验一致性。Fuchsia在IOT领域占据一定份额后,加之其良好的跨平台,可以再逐步渗透到移动手机、笔记本电脑等设备,进而三位一体,打造手机、电脑与IOT完美的互联互通的统一平台体验,让多端设备都离不开Fuchsia。在2018年10月,在“蓝牙特别兴趣小组(Bluetooth SIG)”举办的UnPlugFest(UPF)测试大会上,Google再展示了Fuchsia与Android设备的互联性,可以窥见一斑。

Fuchsia的定位更是物联网,再是一统江湖,但路途漫长,至少要5年甚至更远。未来不可知,当然说不定Fuchsia作为实验项目,一直待在实验室,不过这种可能性比较小,做不到一统江湖,在IOT领域发光发亮还是大有可为的。

  1. 展望未来

操作系统

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

从按键式交互到触屏式交互,伴随着塞班系统到Android系统的转变。未来的交互方式一定会更加生物智能化,当下的触屏交互可以理解成人类的触觉输入方式,未来将朝着人们更常见的听觉输入(语音)和视觉输入(身体姿势、表情等),甚至嗅觉输入(气味变化),也会伴随着新的操作系统的诞生。需要更加无缝地切入生活,而不是“安静,你吵到我的TNT”方式。

屏幕从小尺寸到大尺寸,并没有引发操作系统变革,因为技术创新是非连续性,非连续性才会引发第二曲线,诞生新技术。从1960年大型机,到1990年个人笔记本,再到现在的智能手机,设备本身越来越小。未来的设备如果发展非连续变革,可能不再需要实体硬件,随处可输出,一张白纸、一面墙,到那时操作系统的UI架构必然全新的变化。

前面提到Fuchsia系统,笔者认为至少未来五年内不太可能取代Android,但未来可期。新操作系统的崛起源于降维打击,直线超车很难,需要有非连续变革,如果只是某种程度上的改进,很难突破用户习惯、厂商以及生态圈的阻碍。Fuchsia需要降维打击,比如Fuchsia在IOT领域以及新的交互方式都很出色,加上万物无缝式的互联互通的平台,拥有跨平台型特性的Fuchsia有机会成为超级平台。

Android发展至今,已成为全球用户量最广泛的移动操作系统,手机行业竞争异常激烈,经过几番洗牌,国内手机厂商主要是华米OV四大公司,笔者预测在未来五年内国内手机厂商可能只有TOP3,那么Android的未来在哪里呢?

Google在2014年发布Android Wear智能手表系统、Android TV系统以及Android Auto汽车系统,在2016年发布的Android Things智能设备,这些全方位构建安卓的生态圈。在未来在人工智能和5G的赋能下,智能汽车、智能家居、IOT都将会有广阔的市场前景。但就目前人工智能的奇点还没到来,技术还处于前期阶段,一旦奇点来临将会爆炸式发展,或将重新定义生活方式。

汽车的智能化和互联网化是未来一大趋势,Google这两年确实在汽车领域发力,Android Auto在过去一年的用户增长250%。天生的移动特性加上越来越多的互联网服务需求,汽车需要一个具备多种感知能力的系统,或将成为是继手机、电视后Android的下一重点开拓领域。受到驾驶安全的限制,车载场景正好需要将以往的触屏按钮的交互方式,转向语音交互和生物感知,车舱内是天然的语音交互场景,而不再是“安静,你吵到我的TNT”,语音和图像识别、人工智能等技术或许会在车载领域得到更大的发展。

职业发展

随着Android的发展,有些人对Android未来感到茫然,经常收到读者私信问,“前辈,从事Android是不是没有前途,找工作困难,希望能给点建议?”。早在2010年市场上有大量Android招聘,基本懂一点Java基础的就可以搞Android,当时是移动互联网创业的高峰期,号称只要做个App就可以创业。“风来了猪都能找到工作,风停了最先摔死的都是猪”,如果你觉得找工作难,那一定是你在混日子,Android中高级以上的人才一直都非常稀缺

只要在Android领域深耕,做到极致,努力成为这个方向的专家,有精力再提升工程架构思维,软件工程思想都是相通的,境界会得到提升,即便再学习新东西也会非常快。只要一个领域做到极致,即便Android被淘汰了,换新领域面试官依然会相信你也能做到极致。千万不能用一年的工作能力混十年工作经历,否则你的市场价格连一年都不如,成为工作困难户。

Android

Android系统迭代更新10余年,在用户体验、性能、功耗、安全、隐私等方面都取得很大的进步,后续版本会持续在内存、文件系统、虚拟机、图形图像等方向优化。随着Android系统功能越来越多,系统架构中有些模块未来可能会被重构,某些服务大锁制约性能,比如Android 8.0优化过binder大锁让性能显著提升。关于图形方面,Vulkan将会是未来Android平台的一个发展方向,尤其是游戏领域。

人工智能在Android系统上目前效果不太显著,Google未来应该还会持续投入,比如在AI预测用户行为加上相应后台管控策略用于提升手机续航。碎片化仍是当下最主要的问题,碎片化也导致用户隐私、安全和体验一致性方面得不到保障,Google专门成立团队致力于Android Mainline,从Android Q开始规划Mainline,未来的版本都将逐步迭代更新。最后说一点,App兼容性问题比较严重,据Google实验统计Android Q系统在全球Top 1000应用的兼容性不达标率4.3%,而中国Top 1000应用的兼容性不达标率17.6%,可见国内Android生态圈更为严峻得多,Google对隐藏API的限制就是一步长远之棋,短期内导致应用不兼容加剧,长期来看生态圈会逐步健康,最理想的情况就是Android系统大版本升级而App兼容性问题不再有,后续Google应和厂商会加强跟主流应用协作规范应用,搭建良好健康的Android生态圈。

以上是笔者对Android系统及对未来的一些拙见,欢迎业界同仁一起探讨。

华为方舟编译器官网正式上线,写一篇你应该知道的科普文章

本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每个工作日都有文章更新。

8月31日,早上9点,华为方舟编译器官网就这么悄然上线了。网上甚至没有大面积的新闻报道,我是隔天才知道的这个消息。

在今年4月份华为P30系列的发布会上,华为首次对外公开了正在自主研发一款开源的统一编程平台,可以大幅提升Android应用程序在手机上的运行效率,称之为方舟编译器,随即在业内引起了轰动。当初华为给出的预计时间是,方舟编译器将会在今年8月份开源编译框架代码,11月份开源完整的方舟编译器,那么终于在8月份的最后一天,华为完成了自己的承诺,上线了方舟编译器的官网。


至于方舟编译器的用途是什么?以及为什么可以大幅提升Android应用程序的运行效率?华为也在P30发布会之后的技术沙龙会议上进行了具体的解释。从方舟编译器的工作原理上来看,虽然确实是可行的,但是技术难度非常高,如果华为真的能按照自己当初的设计方案来完成方舟编译器,或许真有可能会在Android开发界掀起一场变革。

那么我是一名开发者,我的公众号的读者朋友们也都是开发者,因此这里我就站在一个开发者的角度上写一篇科普文章,让每一位看完本篇文章的读者朋友们都能更加清楚地了解方舟编译器。

首先由于历史遗留问题,Android的开发与编译环境并不是完美无缺。可能是考虑到当初编程语言排行榜霸主的因素,也有可能是因为能够更加符合Android开放式合作操作系统的定位,总之Google就是采用了Java语言来作为Android应用程序开发的首选语言。

虽然在Android 1.5系统之后Google又引入了NDK功能来允许Java去调用一些由C/C++代码开发的so库,但是Java的正统地位却从来没有被撼动过(Kotlin也是基于Java虚拟器的编程语言,因此对于方舟编译器而言Kotlin和Java没有区别,故不在本篇文章的讨论范围内)。

熟悉Java的朋友应该都清楚,它是一种预编译解释型语言,每执行一行代码,会由解释器将这行代码先解释成CPU看得懂的机器码,然后再去执行。解释型语言的好处是可以实现一次编译随处运行的便利性,因为对于不同平台而言只需要换用不同的解释器即可,但是坏处也很明显,就是运行效率低下。

很多用户都抱怨过Android应用不同iOS应用流畅,当然原因可能有很多种,但是上述原因绝对是重要的原因之一。


在基于Java(Kotlin)编程语言的总战略思想不可动摇的前提下,Google为了提升Android应用程序的运行效率可谓是煞费苦心。在最开始的时候,Android系统中内置了一个Dalvik虚拟机,其实也就是Google自己编写的一个Java虚拟器,然后使用边解释边执行的方式来运行Java代码,这种模式运行效率极其低下,因此很快Google就引入了JIT模式来改善这种情况。

JIT(Just In Time)是即时编译的意思,当用户在使用App时,会将经常使用的功能编译成机器码,这样当再次使用这个功能时就可以直接运行机器码,而不用每次都一行行翻译了。

然而JIT的机制仍然不够完美,在Android 5.0系统的时候Google进行了一次大变更,废弃了Dalvik虚拟机,引入了全新开发的ART虚拟机,并使用AOT(Ahead Of Time)的方式来提升运行效率。AOT就是在应用安装的时候预先将代码都编译成机器码,这样在应用运行的时候就不用再做解释工作了,直接就可以运行。

那一年的Google I/O大会真的是慷慨激昂,Google认为自己找到了最完美的方式,Android应用的运行效率终于可以和iOS应用相媲美了。


然而最终用户实际的反馈却并不怎么好,AOT机制使得安装应用变得太慢了,而且预先编译机器码还会占用额外的手机空间。

于是在Android 7.0系统中,Google又进行了调整,这次重新引入了JIT模式。应用安装的时候不会进行编译操作,以保证安装速度。在设备空闲的时候,将一些常用的代码使用AOT的方式进行编译,如果执行到还没来得及编译的代码,那么就使用JIT+解释执行的方式来顶住。这也算是Google在安装速度和运行速度之间进行的一种平衡吧。

之后的每个系统版本虽然仍然有一些改变,但基本都是在AOT+JIT+解释执行之间进行动态调整,以找到一个更好的平衡点。可是制约Android运行效率最关键的虚拟机这个点,Google却一直都无法解决。

而方舟编译器生来就是为了干掉虚拟机的。

根据华为在P30发布会上所公开的资料,方舟编译器所采用的机制是将Java代码转换成机器码的这个过程提前到了编译打包的时候,这样生成的安装文件所包含的代码本身就已经是机器码了,因此即便是应用程序安装后首次运行,速度也会非常流畅。

这种方案确实可行,但是会存在一个问题。在方舟编译器这种工作原理下打出来的安装包改变了Android原生的apk格式规则,有可能会变成华为自主定义的一套hpk格式的安装包。而这种安装包肯定是不被Android原生系统支持的,因此使用方舟编译器所生成的安装包大概率只能安装到华为自己的手机上,当然也不排除未来国内其他手机厂商对华为这种格式进行兼容的可能。

上述的内容都是我当初在基于现有公开资料的基础上进行的推测,然而随着方舟编译器官网的正式上线,也证实了我之前的推测是错误的。

方舟编译器的官网有一个代码演示功能,我尝试将它网上的Java代码示例编译并运行,结果发现输出的却是一个so库。


这让我大吃一惊!要知道,so库是C/C++代码通过cmake或者ndk-build编译之后生成的本地库,而方舟编译器竟然可以将Java代码直接转换成so库,不得不说华为的这套思路真的太敢想了。

使用so库不仅可以解决Android应用原来的低效解释运行模式,而且还能保证最终生成的安装包文件和原生的apk文件格式一致,因为so库本身就是被Android系统所支持的。这样我之前所推测的hpk格式的安装包就已经不成立了,方舟编译器的战略眼光也并没有仅仅只是放在华为自家的平台上面,而是放眼于全Android平台,因为使用方舟编译器编译出来的apk可以正常安装到所有Android手机上。

另外,Java语言还有一个非常重要的特性,与C++不同,Java是不用手动释放内存的,Java虚拟机将会不定期自动回收不再被使用的对象,这也是Java被广大程序员喜爱的一个重要原因。不过这种回收机制也造成了一个问题,当触发回收过程的时候,将会暂停所有正在运行的Java线程,虽然这个过程很短暂,但是在一些低配手机上可能就会造成了一种随机性卡顿的现象。

而方舟编译器的工作原理天然就可以解决这个问题,因为将Java代码全部转换成so库之后,Java虚拟机的自动回收机制也就无需工作了,这样随机性卡顿的问题自然不复存在。这个过程对于我们开发者而言是透明的,但是对于方舟编译器而言,这个过程真的很难很难,因为要将开发者的Java代码转换成so库,还要能自动检查并回收不再被使用的对象,在我看来根本就是不可能的事情。

方舟编译器的设计思想的确非常先进,并且相信华为也已经攻克了无数的技术难关。但是对于华为来说,现在最缺的应该还是时间。从这次方舟编译器官网的上线就可以看出,有点赶鸭子上架的感觉,开发者文档极其简单,只有一些简短的架构描述和环境搭建流程。


代码演示也是预先定义好的代码模板,不支持修改后重新运行,只能预览一下预定代码的执行结果。

另外编译器下载分为源代码包下载和二进制包下载两种,源代码我确实是看不懂,因为我选择下载了编译好的二进制包,但是解压之后发现只有4个编译好的二进制文件和一些sample样例,官网也并没有描述该如何使用。


这和我预想的并不一样,因为我本来以为方舟编译器会是一个类似于Android Studio那样的IDE开发工具。不过有朋友告诉我,华为的IDE工具还正在开发当中,这次开源的只是编译器框架部分源码,但这也更加印证了方舟编译器的官网是赶在8月这个时间节点上紧急上线的一个网站。

不管怎么说,方舟编译器的思想是超前且先进的,也非常希望看到在编译器这个领域里能有国产技术的出现,只是华为还需要更多的时间。

另外一定会有朋友关心,随着未来方舟编译器的推出和不断完善,Android开发工具会迎来一场大变革吗?Android Studio会被取代吗?这种未来的事情我其实也不可能预测的准,但是Google的官方开发工具Android Studio是专门用于开发Android应用程序的,而方舟编译器则是为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编程平台。它们的定位并不完全相同,因此也未必会是这种只能二选一的竞争关系。Android系统毕竟还是Google家的,华为在这上面的话语权肯定不足,与其说方舟编译器是要为了和Android Studio抢市场,不如说华为这是提前在编译器的领域进行布局,倘若未来方舟编译器可以用于开发鸿蒙系统的App,这看起来就更像是一个梦幻组合了。

虽然中国的互联网技术已经进入了世界最顶尖的行列,移动支付的普及率和便捷性更是达到了国外无法想象的程度,但是在计算机行业最基本最底层的芯片、操作系统、编程语言、编译器等领域,中国和欧美国家还存在非常大的技术差距。而华为是国内少有的几家有这个资本且愿意涉足这几个领域的企业,给它足够多的时间吧。

关注我的技术公众号,每个工作日都有优质技术文章推送。

2019年『锋潮奥斯卡』年度创新技术:鸿蒙系统

2019-12-30 15:08

上榜理由:基于“微内核”的全场景分布式OS,iOS级别的应用生态系统

转眼间2019年即将成为过去,科技数码圈这一年发展依然是日新月异,各种创新技术像春笋破土般,争相露头,5G SA/NSA 、6G太赫兹、Wi-Fi 6、AIoT、区块链、MEC等等等……如果你要小安选一个年度最具代表的创新技术,小安会投鸿蒙系统一票,为什么?因为它的诞生有了改写固有操作系统全球垄断的机会,同时为未来中国其他相关制造商提供了重要战略意义。

目前大家最为熟知的手机操作系统,一个是iOS,另外一个是安卓。虽然诸如Kai OS、Windows Phone、Symbian等在市场上占一小部分份额,但事实上iOS、安卓这两位老大几乎垄断了整个手机市场。iPhone的火爆很大程度上依赖于iOS系统的出色发挥,但可惜的是iOS系统并不对外开放,这也导致其它手机厂商只能装(bei)上(po)谷歌的安卓系统了。直到鸿蒙系统的出现……

鸿蒙,英文名 Harmony OS,意为和谐。它有几个简单的特性:分布架构、天生流畅、内核安全、生态共享。所谓分布架构,是以「模块」为理念,解耦移动设备,对不同的设备进行科学的弹性部署。把所有智能设备解耦,形成屏、芯、音、麦、摄、讯、感、算几大分类,以处理器芯片为核心,调动显示屏、扬声器、麦克风、摄像头、通信、传感器、计算力,强化各设备间的交互。以微内核为基础,从内核层面优化系统性能,相较于安卓甚至 iOS 实现更流畅的性能表现。同时,基于微内核打造的免 ROOT 安全系统,一方面给开发者提供便携,一方面又给用户安全提供保障。所有的这一切,组成了鸿蒙自身的开放生态,总结来说,万物互联时代,万物皆可鸿蒙。

“基于微内核的全场景分布式OS”这句话是发布会上提的最频的话,小安的解读是:鸿蒙不是一个专门为单独设备准备的系统,它是一个平台式的系统,可以通过中心网络派发资源和功能,所有功能又可以单独使用,灵活多变但统一和谐。

它与其它操作系统最大的不同在于,在运行程序开始前,不是直接执行所有内容,而是先判断你用的是什么设备,然后走预先制定好的单独通道去运行,而所有执行的这些程序,不管你是手机、平板、电视还是电脑等……它们用的都是同一套系统。

这样的好处在于,每次你需要维护的时候,只需要把第一层的东西做升级,下面的底层是不用动的。举个简单易懂的例子,鸿蒙系统就像CD机,不管谁家的CD都可以在这CD机上播放,只要你按统一的程序做光盘就行了,如果你想听其他音乐,只需换一张CD即可。

从上面小安的讲解相信大家都明白,为什么小安会说“鸿蒙”是2019年最具代表性的创新技术之一,「微内核」概念的提出,对开发者来说,提交的应用能更快更便捷地适配所有硬件,对消费者来说,以后能第一时间更新你手里的所有智能设备,这就类似苹果每年iOS大版本更新,全球用户都可以第一时间获得,当然这也是Android用户这辈子都体验不到的,经常拿Android和鸿蒙说事的人,该换一下思路,是时候接轨下一代系统啦!

How

Experience

Android 11 第一个开发者预览版来了,手势、截图、分享都更好用

Android 11 来了,而且这次来的比以往更早。Google 昨天发布了关于 Android 11 的第一个开发者预览版,比去年三月份还要更提前,可见之前乌龙上线关于 Android 11 的页面其实也就早了那么几天而已。

在未来几个月内,Google 计划推出六个预览版,直到今年秋季更新正式版本。


▲ Android 11 DP1. 图片来自:ANDROID AUTHORITY

关于 Android 11 DP1,大方向的变化主要是对未来的技术发展方向会支持的更好,比如对 5G 技术和对折叠屏等不同形态的支持。而在小方向上则是对目前已有的功能在易用性上做更进一步的深化。

Pixel Launcher 增加了智能 Dock 栏和手势教程

在目前的 Pixel Launcher 桌面应用中,我们可以看到在 Google 搜索框上面最近的五个应用是 Dock 栏的位置,这里放置的应用不会随着切换不同的桌面页而改变,所以一般会用来放置类似微信这种使用频率最高的软件。

而所谓的智能 Dock 就是改变了这里固定应用的概念,转而变成系统建议的应用,这个建议方式可能和抽屉顶部的建议应用类似,如果建议的应用不是你需要的也可以通过长按进行隐藏替换。

另一个变化是 Google 正在给 Pixel Launcher 添加手势学习教程,在逐渐用手势替换掉之前的三大金刚虚拟键后,Google 一直在试图改善手势的易用性并不断进行调整,到了 Android 11 看来手势操作已经逐渐定型,添加上教程也是理所当然。

不过手势逐渐定型不代表没有更多细节方向的调整,Android 11 DP1 还增加了一个手势设置的功能选项,其中可以调节手势的灵敏度等细节,看来 Google 仍然没有解决返回手势和「汉堡菜单」之间的冲突。

通知「雁过留痕」让你不会再错过,分类也变得更加详细

Android 11 DP1 还新增了「通知历史」的功能,这个页面可以查看之前通知,哪怕已经在通知栏划掉。这个功能和开发者使用的「通知日志」并不完全相同,猜测可能是面向用户的版本。

另外通知分类也做的更细了,现在关于即使通信类软件的通知会被统一归类到「会话」通知分类下(但是不包括 Twitter 这些社交媒体)。

Android 的分享功能一直以超越 iOS 的体验为用户津津乐道,在 Android 11 DP1 上 Google 进一步增强了分享菜单的易用性,允许用户将最多四个应用固定到分享菜单的顶部,把微信等高频应用钉在那里相信会让分享功能更好用。

反向充电来了和飞行模式不会断开蓝牙

如今反向充电似乎也成了旗舰手机必备的功能之一,在新系统中也出现了关于反向无线充电的「电池共享」等功能提示。或许在 Pixel 5 上我们就能见到了。

Android 11 DP1 还改善了飞行模式的易用性,现在开启飞行模式的时候蓝牙不会被关闭,显然对于智能手表和真无线耳机更友好了。

截图更好用了,原生录屏也有了

截图方面也有改进,Android 11 DP1 的截图方式看起来学习了 iOS,截图后会在屏幕左下角生成缩略图和菜单,而不是像 Android 10 一样到通知栏去处理。另外系统原生的屏幕录制也安排上了。

之前所说的黑暗模式支持了设置时间切换以及日落切换。还有隐私安全和易用性也得到了进一步改进。

基本上 Android 11 DP1 的主要功能改进就包含这些,其它方面就是更加偏向开发者的改进了,对于普通用户来说感知不强。

不过要注意的是,在之后的几个版本中 Google 很可能会逐渐加入更多的改进功能,同时也有可能将现有的功能变化砍掉,直到最后一两个版本功能完成修 Bug,再到秋季正式版更新。对于更多的功能变化,在今年的 Google I/O 应该会有更全面的解释。

今年最赞的 10 款 Android 应用,我们为你选出来了 | AppSo 年度榜单

Be My Eyes

帮助过数万视障人士的这个公益 App,今年登陆了 Android。你短短数十秒的视频通话,就帮 Ta 跨越了难以逾越的障碍。

Tandem 语言交换

学外语最有效的办法自然是多说。想跟老外聊天练习外语?你只需成为这个 App 的用户,剩下的一切它都帮你包办好了。

FaceApp

一个基于人工智能的趣味摄影应用。自拍一张,无论你是要变年轻、变老、增加笑容还是改变相貌,它都能一一做到。

Canva

谁都能掌握的平面设计 App。它拥有简单直观的操作、多样的模板、丰富的图库。只需几分钟,你就能轻松地做出惊艳作品。

SleepTown

现代都市生活节奏快压力大,规律作息似乎可望而不可及。这款 App 尝试用趣味玩法令你早睡早起,睡眠不足的你一定需要。

Notebook

斩获今年 Google Play 年度最佳的笔记应用。无论是文字、音频、照片,随手就能记。高颜值的界面设计,让记录本身也成为享受。

纯纯写作

一款纯粹的文本编辑应用。没有复杂花哨的功能,它只想给你带来绝对不丢失内容、随时随地的写作体验。

抖音短视频

今年爆火的音乐短视频应用。简单几步,就能录制、分享你自己的短视频。人们表达自我的门槛,正变得越来越低。

SideChef

一款烹饪工具 App。内置高质量食谱,从材料准备到烹煮调味,图文加语音循循善诱,手把手教你做出一道道佳肴。

Microsoft Edge

微软新一代的浏览器,今年开始挑战 Android。目前已有简洁、快捷的浏览体验,后续更多桌面端功能的跟进更是让人期待。

年度最进取:夸克浏览器

移动互联网老兵 UC 内部创业的诚意之作,以极简风亮相,经过 2 个的版本的高效迭代,突破浏览器的用户边界,迅速成长为个性化的效率工具,值得一试。

年度最有潜力:腾讯乘车码

这不是应用,而是一款可以取代公交卡的小程序。智慧出行是趋势,从公交到地铁,它正在慢慢扩展可用范围。在未来,它或许会成为你日常出行必不可少的伴侣。

Reference

  1. Linux 5.5正式发布
  2. Android Studio
  3. Google Archive
  4. 郭霖
  5. 第一行代码——Android(第2版)
  6. 郭霖 guolindev
  7. 两年沉淀,我的开源项目已上线!
  8. Android 开源项目分类汇总
  9. GitHub Android Libraries Top 100 简介
  10. GitHub iOS Top 100 简介
  11. Android 开发中的日常积累
  12. Android 优秀开源项目汇总
  13. GitHub上最火的Android开源项目
  14. 开源巨献:Google最热门60款开源项目
  15. 2019年 Android 开源框架 排行榜 TOP 60
  16. Android开发常用开源框架
  17. Android 开源项目源码解析
  18. Android Studio新建时没有java class选项
  19. AndroidStudio如何新建java工程?
  20. Android Studio 添加引用Module项目
  21. androidstudio中运行java程序的两种方式
  22. 当 Android 开发者遇见 TensorFlow
  23. google 拼音输入法 android studio可编译
  24. Add Google Maven repository to Android Studio Project
  25. 写给软件工程师看的硬件编程指南
  26. 玩Android - wanandroid.com - 每日推荐优质文章
  27. 极客阅读
  28. Android——See what’s new with Android - from phones to watches and more.
  29. 郭霖的专栏——每当你在感叹,如果有这样一个东西就好了的时候,请注意,其实这是你的机会
  30. 老罗的Android之旅——爱生活,爱Android
  31. 胡凯
  32. eclipse_xu
  33. Android官方培训课程中文版(v0.9.7)
  34. 湖前琴亭——好好做技术,认真写博文
  35. Android群英传——神兵利器
  36. Android源码设计模式解析与实战
  37. 第一行代码:Android(第2版)
  38. Android系统源代码情景分析
  39. Android学习资源网站大全
  40. Android源码设计模式分析开源项目
  41. 2015年最新Android基础入门教程
  42. ANDROID学习之路
  43. 编程入门指南 v1.5
  44. lottie-android
  45. Android-Universal-Image-Loader
  46. android-gif-drawable
  47. awesome-android-ui
  48. android-open-project
  49. 谷歌全新操作系统Pigweed曝光,Android 11偷跑
  50. 安卓手机系统连接电视,最好的方案是什么?
  51. 使用 Scriptable App 开发 iPhone 小组件(中文)

欢迎关注我的其它发布渠道