背景
首先,APP适配问题的由来,是因为无线智能终端和以往的Windows/MacOs相比,属于软硬件高度绑定的嵌入式设备,大多数智能终端的系统和硬件都是高度绑定的,并不像当年的Windows可以兼容大多数的机器配置。由于硬件驱动和功能的不断创新,各个厂家会针对自己的终端在系统上做很多的定制化工作。尤其是Android,由于源码开放且厂家众多,各厂家采用的硬件种类繁多,因此各终端系统的碎片化就越来越严重。
我们的APP需要在如此众多的终端上运行,而终端的系统版本、屏幕分辨率、所用的配件千差万别,厂商带来的系统API改动非常的多。当我们的代码调用系统的API产生了不一致的效果而没有很好的处理的话,就很容易产生适配问题。
iOS篇
由于iOS的厂家只有苹果比较简单,所以我们先来谈谈iOS。
由于iOS本身的封闭性,软硬件都是用苹果自己的芯片和系统,那我们就从硬件和软件两方面来分析一下看看有什么差异:
硬件
大家应该都知道即便是同一款iPhone也会区分不同的型号,这个主要是和发行区域有关,在有些地方iPhone会和当地的运营商合作推出带锁的版本,也就是让手机只支持某一类运营商的网络,虽然这会导致在基带芯片上有所不同,不过由于苹果的运算芯片采用的是自研芯片,因此对于适配同款iPhone的不同型号来说基本没有差异。
软件
由于iOS本身是封闭的,全球所有iPhone都是使用苹果自己的iOS系统,采用的服务和框架也都是苹果提供的,因此不同地区的iOS系统本身除了本地化的一些语言差异可以说基本没有什么差异,只有系统版本间的差异。
总体来说,由于苹果的封闭性,对于设备碎片化的把控都是比较好的。因此我们重点关注影响适配是以下几个因素:
系统版本>屏幕尺寸>机型>语言>网络>海外版本。
因此,我们的第一重点是放在系统版本的差别上,因为系统版本的升级会更改一大批API的内部调用处理方式,是最容易出现适配问题和Crash问题的原因,这一点可以从历史问题中来证明。第二个原因就是屏幕的尺寸,这个基本上就和机型是强相关的,因为iPhone机型少,而尺寸基本上就是由机型不同来决定。而屏幕尺寸的不同又很容易导致我们的控件显示尺寸在没有做好适配的情况下变形,虽然不易产生Crash,但是用户会看到变形甚至不全的信息,也会严重影响到用户功能使用,因此也需要重点关注。
综上所述,我们对于iOS的适配策略总体就是,版本覆盖完全,屏幕覆盖完全,机型覆盖完全。
Android篇
接下来就是我们的大头Android系统的适配问题了,大家经常提到的Android碎片化,主要体现在设备碎片化、品牌碎片化、系统碎片化、屏幕碎片化等多方面。我们在保证产品功能正常的同时,还需要兼容碎片化可能带来的潜在问题,以确保良好的用户体验。
碎片化情况
设备碎片化
以下是opensignal平台统计的当前Android手机设备型号碎片图,已经有超过18000+种的设备了。
品牌碎片化
以下是opensignal平台统计的当前Android手机品牌碎片图,从图中我们可以看到各类手机品牌非常多。
系统碎片化
以下是opensignal平台统计的当前Android操作系统碎片图。从2008年发布的Android第1版到2018年最新的9.0版本,以及期间各大版本过程中发布的小版本和bug fix版本,目前都有不同的手机厂商在使用,有的进行了深度定制,有的推出了自己的ROM,这些无疑更加剧了Android操作系统严重的碎片化。
屏幕碎片化
以下是opensignal平台统计的当前Android手机设备屏幕的碎片图,可见Android的屏幕尺寸规格众多,在这种碎片化中,你的App说不好会落到哪个坑里面,也许是某个特殊屏幕分辨率。