您的当前位置:首页正文

产品经理的技术修养之路 - Android适配篇

来源:华拓网

写在前面

其实我知道,关注产品经理这个职业的群体,大多数人更爱讨论的是方法论,是人性哲学,是模型与数据......而技术或者操作的相关内容都太硬,既无逼格,也无谈资。

不过么,我就喜欢啃硬骨头,汪~~~

写得不是很好,欢迎大家(让我看到你们举起的双手)指正批评科科~

我与Android的孽缘

遥想我的学生时代经济有限,又爱折腾,09年底的时候就入手了HTC G2,当时安卓力压windows miobile,在iphone触摸不到的地方,生根立命,野蛮生长

目前而言,我的主要工作内容是移动端App的产品设计,主要工作经历集中在Android(为了缩减字数,下文译为「安卓」)端工具项目上。

由于安卓工具类应用的竞争非常激烈,也由此使得对应的PM需要对平台的限制与特点有较为清晰的认识。

Android ≈ AOSP + GMS

安卓的源码是开源的,亲爸爸google牵头的AOSP(Android Open-Source Project),负责对外公布源码。

AOSP官网常年404,帝国主义亡我之心不死,连文档都不给我们看。(´_`。)

尽管AOSP是开源且免费的,内核代码使用的是GPL协议,应用层则为Apache协议,但是光靠AOSP提供的代码:内核、虚拟机、包含部分应用的基础框架,是无法提供完整系统功能的。

在国外这部分功能,越来越多依赖于GMS(Google Mobile Service)来完成,包括在原生系统上可以看到「环聊」、「地图」、「Play商店」等。

GMS不但包括了完整的应用,还提供了私有的服务API,比如依赖Google Map地理位置服务等。

作为一个PM,基本上你需要拥有一台google亲儿子,用以更新最新的原生系统,跟进最新的产品特性。

比如Android L(5.0)的开始倡导的Material Design设计规范,又或者Android M(6.0) 的Doze Mode休眠模式,第一时间也只能在google亲儿子Nexus上体验与研究。

没有Nexus太子爷设备怎么办,其实最简单的方式就是有空关注下行业新闻,特别是每年的google io大会。当然有时间,简单刷刷Android开发者官网也是不错的选择,不管是设备、系统、设计规范都有涉及。

AOSP只是Google向厂家抛出的橄榄枝。
GMS才是Google野心所在。


适配天坑

对于投放国外的安卓手机,厂家需要在AOSP的源码基础上针对机型进行适配,主要包括硬件驱动,文件分区,radio通信组件,自己嵌入内核级或者系统级应用服务的重新适配和优化工作,并通过付费获得GMS服务授权(国内当然是替换),完善手机使用体验。

但是由于安卓的开放特性,不同厂家的产品在软硬件上天然带有不同的特点,以下是几个最典型的例子:

屏幕分辨率混乱

分辨率的适配是最常见的问题。由于不同厂家千奇百怪的屏幕分辨率与DPI设置,导致在UI设计上,不得不考虑屏幕的具体显示效果,甚至要做多套设计。

产品设计之初就考虑多套设计可能还好,但是运营多年的产品在升级的时候就很棘手。

不过随着iPhone的不断更新,也出现了多种分辨率的情况,但是远远没有安卓严重。

  • 某产品在12年设计的app A ,设计基础是基于640P分辨率设计的,当时市场上的主要机型分辨率是640x480,同时市场上存在大量的320x480廉价产品。
  • 随着手机产品快速迭代,目前市场上,大多数手机分辨率已经稳定在720p以上,所以A产品在重新组织设计时,采用了基于720P的设计方案,同时兼容了640P。
  • 产品改版上线之后,由于产品A市场存量巨大,在大量消失在关注视野中的320x480分辨率的手机界面严重错位,导致大量投诉,造成产品事故。

以上案例从本质上说,并不是产品设计的问题,而是实际产品运营中,灰度发布与选择性配置升级的问题,当然很多产品涉及之初是没有可配置的升级策略的,大多都是通过分发市场进行分发,也缺少分发控制(幸好现在各家市场推送自定义的配置功能已经开始完善了),所以问题的爆发也难以避免。

Google 2015年11月2日更新的的数据

而实际造成的问题,举几个实际工作中遇到的例子来说:

  1. 2.3系统的通知栏是不支持自定义响应区域的,也就是说2.3版本的安卓手机上,在一个通知栏中是无法实现多个快捷操作的。
  1. 4.0系统使用的Dalvik虚拟机,而5.0使用的ART虚拟机。ART虚拟机为了加快应用启动速度,对应用做了类似预编译处理,这就造成了在5.0系统上,一些工具软件的扫描检测操作反而会变慢,造成应用变卡的感受。
  1. 涉及Root、注入、Hook等操作黑科技工具,由于厂家在定制自身系统时多多少少都会对接口进行修改,甚至引入了更多的bug,这些情况,都会导致这类产品在面对厂家升级动作都会很敏感。

不同的厂商在同一时间发行的系统版本不同,造成安卓系统的严重分裂,特别是2.3、4.0、5.0 这三个分水岭,适配上回消耗大量时间。之前我负责的某App由于功能高度依赖对系统的注入的,尽管功能很强大,但是对系统稳定性的要求非常高,今年4月开始,三星开始推送5.0 系统的时候,本来三星的推送系统稳定性就有一定问题,加上一堆刷机的用户,各种内测包,欧版包,工程泄露包,真的把我和对应开发给干哭了。

混乱的权限控制

随着手机厂商对安全以及用户隐私保护的重视,特别是国产系统加入了不同程度的权限管理模块,有些厂家是自己做的,有些是用的360或者LBE的对应模块。

如果效果和iOS的权限控制一样的话就还好,但问题是,这类功能的实现都是以第三方私有接口的方式实现的,也就是说,大多数应用是无法通过公开接口来确认自己是否获得了对应的权限。

比如地理位置、摄像头、网络开关、短信读写、读取应用程序列表这些功能,基本都被列入到了权限管理范围中,当相关应用启动后,一般会弹窗提示权限申请,具体建议禁止还是允许,这个依赖权限权利模块的运营工作。

假如用户选择禁止,或者用户选择超时采用了默认禁止的策略,应用本身没有回调或者返回值知道结果的,此时轻则功能失效,重则应用崩溃。

而且这些私有接口并不能主动调用,如果默认是禁止,第三方应用想要再次弹起确认弹窗请用户确认都做不到。

其实不能主动调用权限确认弹窗也没事,iOS也是一样,只确认一次。但是人家iOS大哥,有明显权限受限的系统提示,且可以跳转到指定设置页面让用户手动确认,反正设置界面跑不了。

而安卓大哥们,每一家的权限控制的入口都不一样,有些在安全中心,一些在应用详情,你们升级个ROM还挪个位置,除了你们自己,估计没几个用户知道到底在哪里开。

第三方应用做半天引导,过两个版本就得改流程。有钱的开发商,还是去手机厂商大哥那边交保护费,求个默认权限开启吧,真是经不起折腾。

关于解决方案:

  1. 如果大家细心的话,很多应用尽管通过异常处理,避免的崩溃问题,但是依然只能通过兼容性说明的方式,告知用户开启的步骤。
  1. 更夸张的,基于对用户心智的不信任,很多安全工具,已经开始引导用户打开「辅助点击」(原来为视力障碍人士设计的功能),来模拟点击动作,并通过原本运营好的操作路径,一路自动点击,直到打开需要的相应权限为止。
  1. 安卓6.0推送了,自带了权限管理,跪求手机厂商们,响应下google大哥,统一下设置入口和权限接口,给第三方App产品一条活路。

PS:

模拟点击还被清理软件用来帮助非ROOT用户,强行关闭后台软件。(因为基于「用户小白」理论,用户是不可能知道怎么去应用软件列表强行关闭应用的,当然的确很多用户不知道)天啦噜,国产PM真是辛苦了。


三大天王

由于众所周知的大中华局域网的问题,自带的google服务和原生的Android系统是几乎无法流畅使用的。

于是乎,手机厂商,必须植入替代GMS服务来完善安卓手机的功能体验,最开始,仅仅是替换一些应用,比如将Google搜索替换成百度搜索,Google Play 替换成xx手机助手等等。

但是随着市场竞争的加剧,以及广大人民群众对又便宜又接地气的智能手机的需求,安卓深度定制系统「三大天王」逐一登场:

小米 MIUI
华为 Emotion UI
魅族 Flyme

以三大天王为首的国产ROM的适配,一直是安卓产品汪的梦魇之一,举几个栗子来说明下,大家就自行体会就好:

  1. MIUI的授权管理

    MIUI 6.0开始,其开发版自带的权限管理,不再采用提权实时弹窗处理的方式给出提示,而是在其「安全中心」的授权管理中,主动点击才能完成授权,并且每次授权,有5个提醒弹窗,每个弹窗都有必须阅读3秒钟左右。

    这个设计对于用户来说完全没有问题,其保证Root授权行为的安全性,避免用户在不了解的情况下,授权给危险软件。但是对于应用设计者来说,由于进行su申请时,不再实时弹窗,会直接导致功能不能实时生效,因此必须额外设计必要的引导流程。

    PS: 负责任的说,其实这样的设计,从用户的角度来说还是很用心良苦的,毕竟安卓设备Root代表了一切的控制权

  2. Emotion UI的通知栏

    Emotion UI 简称 EMUI,在3.0的设计中,对通知栏通知假如了加入了时间轴设计。看上去美美的设计,导致实际通知栏的通知可显示区域被严重压缩,导致本来可以正常显示的通知栏内容,无法正常显示甚至错位。

    这个设计典型的是为了所谓「美」而发生的拍脑袋设计,完全没有考虑过兼容性问题对UI美观性带来的更大伤害。

    EMUI的通知栏,华丽的啊
  1. Flyme的Smart Bar

    Smart Bar 简称SB,作为魅族自作聪明的设计,加上之前产品独树一帜的16:10或者15:9长宽比,导致大量应用UI设计在Flyme上表现极其不佳,多下巴就忍了,更可怕的是UI错位。

    长宽比是为了阅读体验可以忍,SB彻底是对自己太自信...

    Flyme SB
  2. MIUI 6 禁止自定义状态栏图标

    即使有一万个理由,MIUI V6 不支持自定义状态栏图标。如果你的产品设置了自定义的状态图标,即使MIUI权限管理中点击显示图标,显示的也是应用的icon, icon, icon。 这件事真的伤透了我这只产品汪,每次有用户来投诉我们的产品的自定义状态栏功能无法显示的时候,我只能:「呵呵」

    心碎的都不想截图了。

  1. Flyme 4 自动替换了常驻状态栏的图标样式

    Flyme 4 之后为了保证系统UI的设计一致性,主动替换了其他应用APP的常驻通知栏,大厂的应用还好,会重新画一个,小厂的话,不通过BD联系,直接给一个** ∞ **,没错,就是无穷号。当然比起MIUI6来,我觉得起码看上去好多了。

    另外这个icon即使通过联系BD进行了定制,依然是不能自定义刷新读个样式的。

「贴心」的魅族的状态栏

如果说要总结

类似适配啊,「三大天王」之类的问题,在特色国情下的愈发的坑爹,每次由于这些问题被用户喷,被老板干,我也只能轻轻感叹一句:

怪我咯?


更新日志

2015.11.10

  1. 修正若干错别字
  2. 添加安卓版本分布图