美文网首页AndroidAndroidAndroid
Android碎片化与兼容性问题的元凶

Android碎片化与兼容性问题的元凶

作者: 匿蟒 | 来源:发表于2015-10-08 02:19 被阅读5610次

Android碎片化是其发展中的一个计划内的必然结果,也从来就不是什么问题。真正的问题是不同Android系统的应用兼容性。

Android的碎片化

Android的碎片化,是指它在发展的过程中,随着自身版本的更迭,以及硬件厂商的自行定制,而带来的一个版本数量爆炸的问题。

碎片化的Android

本来Google的Android自身就有版本更迭的需求,这是当代大多数主流软件的做法。流行的Android版本有2.2、2.3、3.2、4.0.3、4.2.2、4.4、5.0、5.1等,近期6.0也发布了。

但是,和大多数软件不同的是,Android是手机的操作系统,不是说更新就更新的。很多改动不能保证系统层面的向前兼容,因此不能像普通软件那样推送了就更新。Android更新既有风险,也有限制

例如,Android 4.0.3一共就100M,而Android 5.1.1有700M,这还仅仅是原生ROM的大小,厂商定制的往往更大一些。 对部分高端的Android 4.0时代的手机来说,也许仅仅需要更改System分区的大小。但是磁盘分区,通用做法是先格式化——所以有数据丢失的风险。而对部分低端的手机来说,根本就没那么大的容量来装系统,谁知道它会暴涨7倍——所以还有根本更新不了的限制情况。

这一点,Android类似Windows。

但是,这也就是一个线性增长而已。真正的麻烦来自于每一个厂商都自己做Android与手机硬件的适配,其中大的那些还做定制,例如小米的MIUI、华为的EMUI、联想的VIBEUI等。这就是N个厂商乘以M个版本,导致的版本数量爆炸。

开放手机联盟与Android的哲学

开放手机联盟的历史

每一本写Android相关的书,第一章提到发展历史时,都会提到一个开放手机联盟Open Handset Alliance )。算上初创和后来加入的,从2007年至2015年,已有84个成员。

The OHA was established on 5 November 2007, led by Google with 34 members, including mobile handset makers, application developers, some mobile carriers and chip makers.

成员中,由开发Android的Google领衔,既包含手机制造商如HTC、Motorola、LG等,也包含了移动通信主要专利持有者及芯片提供商如高通(Qualcomm)、联发科(MediaTek)、爱立信(ST-Ericsson)等,也有其它手机芯片提供商德州仪器(Texas Instruments)、Marvell、博通(broadcom)、英伟达(NVIDIA)等,还有移动运营商如T-Mobile、中国移动等。更有三星(Samsung)、华为这种什么都沾边的巨无霸。

这可以说是囊括了手机壳子里面所有相关软硬件的一个全球性大联盟。

这是Google为了推出Android与Apple部落的iOS抗衡而组建的联盟,而现在回头,也明显看到了效果。Android超越了iOS,成为了市场份额第一。

Android必须碎片化

Android设备的屏幕分布。矩形代表屏幕大小,颜色深浅代表数量多少。

虽然没有详查相关协议,但是Android作为联盟中连接各方的软件实体,其地位非同一般。如果哪天Google不再开源Android,那么联盟立刻瓦解。

Android从一开始,就肩负了拯救世界……呃呸,兼容不同硬件配置的手机设备的责任。Google与中游的移动通讯芯片提供商、下游的手机厂商,以及各种其它芯片、传感器的解决方案提供商,共同努力,才能补全一个完整的Android。Google一家,造不出一台Android手机(Nexus不仅代工,还代研)。

现在,一台Android手机的系统软件,开发流程通常是:

Google发布Android -> Qualcomm(or MediaTek)-> 手机厂商集成其它芯片的驱动 -> 手机厂商定制

为了让厂商能够闭源,Android不遵循GPL协议。这是一个“我开放,你基于我就必须开放”的传染式协议,是一些厂商不能接受的。尤其是一些解决方案提供商,把驱动的源码公开给竞争对手,基本上老底全泄光了。

Android不仅换成了允许商业闭源的Apache协议,还用各种方式把厂商需要修改的底层驱动,放到不会受Linux的GPL协议传染的地方。

开源Android,然后给手机厂商进行闭源再开发,这本就是题中应有之义。Android碎片化是一个计划内的必然结果。

其实碎片化不是问题,真正的问题是兼容性——明明是一个Android应用,却仍然无法正常运行;在那台手机好好的,换这台就不行。

Android的哲学

与iOS的封闭相对,Android的哲学核心就是开放

不仅代码开源,而且实际运行的应用之间也有多种方式进行通信、协作,与iOS的隔离沙箱完全不同。

其次是替换

除了Android kernel本身,任何应用都是可以替换的。桌面系统Launcher的抽屉式设计如果你不喜欢,可以换成各种其它桌面;图标看不惯,可以换各种其它主题。你可以用多款相机软件来使用同一个相机硬件,也可以用不同的通讯录软件来管理通讯录。理论上,除了【设置】以外(毕竟Google不可能知道下游的厂商在手机里安了什么硬件、需要怎么设置),其它软件都是可替换的。

什么都是可以选择的,这体现了一种自由的精神,一种软件之间开放竞争的理念。

当然,一些需要系统权限的功能,必须在System分区预置。

手机厂商的定制,从来就不是问题。与普通开发者相比,厂商无非就是通过预置在System分区可以获取系统权限。其它不需要系统权限的功能,Google、定制厂商、普通开发者,都在同一起跑线,可以自由竞争。

兼容性问题出在哪儿?

Google的问题

先说源头的Google。

CTS

为了保证Android在开放并且碎片化的前提下,能够有同样的兼容性,Google设计了CTS这样一个自动化测试。

CTS全称Compatibility Test Suite,兼容性测试工具,其实是指Google发布的一组测试Android手机兼容性的工具,仅支持Linux平台。

这套工具只是给系统平台开发者用的,也就是手机厂商的软件研发人员,所以相关资料不多。

这是一种自上而下,测试全套Android API及其系统资源是否有效的测试。如果某个API无法在调用后达成特定效果、返回正确的值,或者某张系统图片被改动了一个像素,都会导致测试失败。

每一台Android手机,即使是厂商定制的,都要通过CTS测试。只有在Google公司里,通过了全套CTS测试的手机,才被Google官方认可为Android的手机,才能显示“Powered by Android”并挂牌销售。

可以说,这套测试系统是Google对Android兼容性的最大努力。也正是因此,无论手机厂商做出了怎样的定制修改,都能支持正常的Android应用。

v4、v7、v13……

Android开发者对Android Support v4这个jar包都不会陌生,这是为了让Android v1.6及以后的一些低版本,能够使用一些高级版本才有的特性,而特别加入的。

4、7、13等,这些不是版本号,而是API Level,是与版本不同的另一套编号。基本上每一个重要的小版本改动,API Level都会加一。目前6.0的API Level是23。

这是一种向前兼容的努力。Google希望开发者在后来的新版本开发的应用,也能在一些比较老旧的版本里兼容。

此外,向后兼容,则是体现在对API的持续维护,尽量保证只增不减

但是,目前的Android应用前后版本不兼容,往往体现为旧版本的一些应用在新版本不能用。这类有些是Android API维护问题,有大量@deprecated的API。这些废弃接口不能保证在几个API Level后的版本仍然能正常使用。

新版本应用在旧版本不能用,往往体现在开发者没有使用v4等兼容包,或者手机机能限制无法支持。是开发者或用户的责任。当然,为了新版本而开发软件没有必要兼容旧版本,用户也没有义务更新手机硬件。责任是在那,但并没有错。只是不能把责任推给别人。

这些都是小问题。

Google Play Services

如果说CTS保证了每一个版本的横向兼容(比如,每一个基于Android 4.4定制的其它ROM,都要保证和原生Android 4.4兼容),那么v4等包则保证了纵向兼容(Android 4.4的应用能在Android 2.2的版本运行)。 这之中如果出现一些问题,也都是小问题。

导致闪退最多的因素就是缺乏Google Play Services

Google Play是Google自家的Android应用商店,目前是全球最大的应用商店。很多在其中发布的应用,都依赖于Google在Android中预置的Google Play Services,以调用应用商店相关信息、Google+账户等内容。

而这个GoogleServicesFramework.apk,必须要在System分区才能起作用。

对其技术细节,我也不是很清楚,毕竟活在墙内。我不知道为什么这个apk需要这样做,但是在Android的系统架构上,它一定是可以不通过这种方式实现的。应用宝、360手机助手这种应用商店,就完全没要求厂商预置在系统分区,而是用户随时下载随时使用。

这个必须放在System分区的要求,就使得要么预置,要么伪装为预置(获取Root权限然后复制到/System/app/下)。

这就是最大的问题,也是绝大多数Google Play上的Android应用闪退的原因!

一般来说,如果一个应用依赖于第三方类库、框架,例如各种.so、.jar文件,往往会自行在编译时设为Dependency,自带在APK里;如果依赖一个第三方APK,也可以打包在自家APK里,或者提示用户下载安装这个APK。

Google利用职务之便(发布Android系统给芯片提供商),改成了这种模式,直接造成了Android最大的兼容性问题。

Google Play 的野心

谷歌不是一家搜索广告公司,是一家研发公司。

这是Google高层对自己的界定。不得不说,非常了不起。

但是,商业公司都是逐利的,上市公司尤其如此。这一点,并不能被CEO的意志所改变。你可以不吃肉,也可以不吃素,但不能不吃饭。
无论Google在人们心中是什么形象,无论Google曾经为了技术或以外的什么因素而放弃了多少赚钱机会,都不能否认这一点,它是要逐利的。这也并没有什么不对。

从盈利的角度来看,Google大约90%的收入来源于广告,可以说是一家卖广告的公司。

Google组建开放手机联盟是为了推广Android,这个过程是无利的。推广Android是为了制造一个可以与封闭的iOS抗衡的大平台,这个过程是推动世界智能手机技术发展的。但是制造大平台还不够,因为Google不收Android的授权费(也正因为如此,Google不对下游提供技术支持),它是开源免费的。

这样,利益从何处来?
做Android的研发人员难道靠做搜索的来养?

答案就是Google Play应用商店,一个Android平台中的平台,完全由Google独家控制的大平台。在这里,Google可以继续卖广告

但是,Google Play只是一个应用,不属于Android kernel。按照Android的设计哲学,它也是、或者说也应该是,可以替换的。

对开放手机联盟的背叛

用户、普通开发者,对开发手机联盟基本没有了解。甚至联盟内部的系统开发者,都对这事知之甚少,平时也闭口不提。

看小米科技大红大紫,其实它根本没加入这个联盟。而作为领跑者的HTC,如今在生死线上挣扎。我不禁要问,加入这个联盟有什么好处?

为什么在当代,中国大陆的智能手机飞速崛起,而海外(包括台湾省)的除了韩系三星、LG等,基本都风雨飘摇,既无大利润,也无大出货量?

这个问题很大,解答也很多,这里仅提出一个观点:那堵墙,逼迫中国厂商去除Google相关应用,换上自家做的。本来不情不愿地额外付出了研发成本,却意外地夺回了其中蕴含的巨大利益,并借此生存了下来。

小米直言“硬件不赚钱”,但由于牢牢把控了应用商店、视频、音乐、阅读、浏览器等平台,却获得了足以飞速发展的高额利润,同时也提高了中国用户的体验。而国外的厂商,强如HTC、Motorola,也只能赚一点辛苦的硬件差价,为Google做嫁衣。

应用商店,这一类基于Android的平台究竟该是谁的蛋糕?

既是Google的,也是厂商的,也是其它第三方平台的。可以说,就算Apple跑来做一个“Apk store”,也是符合Android规矩的。
而Google把Google Play预置在System分区,否则不可用,这种技术手段,直接掠夺了墙外相关组织的利益。通过预置和身在System分区的优势,强行提高竞争力,把国外所有第三方APK分发平台打得溃不成军。
这与Microsoft预置IE、QQ绑定各种自家应用、PC的360安全中心自动把360手机助手安装到插入电脑的Android手机上的这类做法,别无二致。

从某种意义上来说,Android是属于开放手机联盟的。可以说,没有这个联盟的推广,就没有Android的今天。如果各大公司各行其是,昔日的王者Symbian将持续演进,Windows Phone将不会惨淡,如三星BADA这样的大厂商自制系统也不会少见。

而如今,Android一统天下,联盟被Google用完就甩了。

本来大家以为Android是手机界的Linux,但其实它是一个可以让所有人看代码、可以让部分人修改分支代码、只有Google自己才能修改主线代码的Windows。

高通与联发科的问题

前面说过,高通(Qualcomm,也简称QC)和联发科(MediaTek,也简称MTK),是移动通讯相关技术的主要芯片提供商。此外,它们也是开发一个Android手机过程中的一个独立环节。手机厂商都是从这一环节发布的Android开始开发,而不是直接修改Google的版本。

Telephony完全不同

Android kernel,面向普通开发者的部分,主要是指frameworks/base下编译出来的那个jar。而Telephony是指frameworks/opt/telephony编译出来的jar,也包括部分apk。算是Android API下面实现层的一个组成部分。

Telephony下面是RIL( Radio Interface Layer ),负责和C/C++那一层对接。再下面就是Modem芯片了。Modem是智能手机作为“手机”的那部分功能的硬件,包括电话、短信、数据连接等,负责和移动基站交互。

以往Google是不太管Telephony的,往往都交给高通、联发科这样的芯片提供商来定制。这两家在Telephony可以说各逞手段,除了大概的架构,细节几乎完全不同!

比如,在Android 4.4及以前,Android手机是不能支持多张手机卡的。市面上的所有双卡双待,都是这两家自行定制,手机厂商再持续改良的结果。实现方案完全不同。

这直接导致了电话、短信等相关应用,基本无法被普通开发者开发,因为有大量的非API依赖。而各大厂商、甚至同一厂商不同型号的手机,这类应用都无法通用。

Google插手Telephony

在Android 5.0以后,Google开始介入Telephony的开发。但是由于版本碎片化,这并没有解决兼容性问题。最多就是可以期待以后的向后兼容。

不过,无情的事实打碎了这种美好的愿景。

整个Telephony在Android 5.0的大幅修改,换来的是与之前版本的完全不兼容。尤其是联发科一系,几乎全部特有实现都砍掉了。从实现方式看,很可能这是高通技术支持的结果,因此联发科成了这次版本变动最大的输家。

从Android 5.0到5.1,对所有用户、绝大多数开发者来说,基本没什么变化。但是对Telephony来说,又是一次翻天覆地的大变。

这两次改动,变化的类、接口、数据库字段等,实在太多。这里仅说一个:subId

Subscription Identification,是每一张电话卡在手机中的唯一标志符。第一插入的卡是1,此后在数据库中依次递增。在Android 4.4及以前,这是一个int类型;在Android 5.0,这变成了一个long类型;在Android 5.1以后,这又变成了一个int类型!

虽然这个东西,并不是对外(普通开发者)开放的,但也是处于整个Telephony模块核心地位,而且上层的部分系统应用都有涉及,改一动万,上下全乱。即使修改,也不能这样反复。这体现出了相关模块负责人的技术水平。

对Nexus以外的智能手机用户来说,这两个版本(5.0、5.1)在“智能”方面的功能可能问题不大,在“手机”方面的功能(驻网、识卡、电话、短信、数据连接等)都处于一个不稳定的状态。比如前面说的双卡双待功能,Google介入后,下游必须大幅改动、重新实现,造成额外开发成本,并降低了系统稳定性。如果在这两个版本的手机上发现相关bug或兼容性问题,十有八九是这个值的类型改动造成的蝴蝶效应所致。

联发科的手很长

和高通比,联发科在移动通讯的技术上是有很大差距的。不知道是不是因为在芯片技术上比不过,联发科对手机厂商提供的技术支持非常丰富而广泛。

联发科的手长,不仅体现在硬件上(除了CPU、Modem外还提供很多其它),也体现在软件上。高通在Telephony及相关的模块以外,修改较少,而联发科则到处都是!从系统应用,到framework,再到下面的各种C/C++层,到处都是它的爪印。用

// M: For some reason {
...
// }

这种东西包着的代码块就是了。

这就导致很多应用,在高通的Android手机上可以正常运行,在联发科的不可以。

比如视频播放软件,要播放MKV等格式,在很多联发科的手机上不支持硬件解码(即芯片本身不能解码播放),只能使用软件解码播放。而大多数视频软件根本不支持软件解码,这就导致软件闪退、视频无法播放等问题。

当然,也有少数反过来的情况。例如VPN,联发科的支持就比高通好些。

无论如何,高通和联发科在通讯技术以外的模块,多少都有介入,联发科尤其多。二者各显神通的结果,就是部分应用在这两类Android手机上不能同时兼容。

国内厂商的问题

去除Google Play Services

国内厂商定制Android ROM,通常第一步都是先去除Google Play Services。

这是被指责最多的一点,但是如前所述,一方面这是国情所限(部分仇恨转移到政府),另一方面这是Android生态“题中应有之义”(剩下仇恨转移回Google)。

这类闪退,主要原因还是Google把很多Android应用,诱拐为Google Play应用所致。

其实,从代码层面来讲是非常清楚的。

所有Android API在Java里import时,都是import android.*这种形式的,而属于Java语言本身的那部分,则是import java.*。除了这二者之外,Android系统在原则上不提供任何其它方式的调用,要import其它的class,请自备jar。

import com.android.*这种的,是系统内部自用的,不提供给普通开发者。
import com.google.*这种东西,和Android没有什么关系。

另外,从CTS的角度来讲,任何一台通过CTS的手机,都是Android手机;能够在某个版本以上的、通过CTS的所有手机上正常运行的应用,才是Android应用。因此依赖于Google Play Services的应用,本身就不具备Android需要的兼容性,这也是我为什么说“诱拐为Google Play应用”。

如果Google真的认为Google Play Services是Android不可分割的一部分,那么将其存在性检查加入CTS就好了。Why not?

不能在任意一台通过了CTS的手机上正常运行的应用,就不是一个兼容性良好的Android应用,而只是一个专有应用罢了。比如一个只能在华为手机上正常使用的应用,就只能算华为应用;一个只能在预置了Google Play的手机上运行的应用,就只是Google Play应用罢了。

所以,不是国内手机不兼容Google Play应用,而是Google Play的部分应用不兼容Android!

无脑定制与bug

厂商在定制的时候,很多在framework层的修改,是欠缺系统规划的。往往是这需要个功能,添加一个代码块;那有一个bug,添加一个代码块。

这些多余的东西,在普通应用调用相关API时,会产生额外的后果,有时会产生应用的功能不正常或直接崩溃。

最典型的就是,普通应用在某些情况下调一个API,接口内部的厂商代码块中发生概率性bug,丢异常,导致应用崩溃。

这类是厂商的软件工程师水平低下所致。

传感器问题

手机或受限于研发成本、或受限于技术限制、或受限于目标用户群体,在一些功能细节上是不一致的。

例如有些手机有温度传感器、气压传感器,最近的手机又开始一起安装指纹解锁、NFC等。这些都不是手机的必备硬件,是完全可以由厂商自主定制的。

而硬件上的不同,带来的应用功能失效,这也是兼容性问题的一种。比如一个测温度的应用,放到一个没有温度传感器的手机上,当然无法正常工作。

这就完全没办法了。

结语

一不小心写多了。

Google是Android应用兼容性问题最大的元凶!——其实我就是想把这个会被拍砖的观点,藏在标题以外的地方,并且让它显得合情合理一点,字数就上去了。

Google明明为了在Android必须碎片化(开放手机联盟)的前提下,保证应用兼容性而做出了多重努力(CTS、v4等兼容包),但还是自相矛盾地搞出了GoogleServicesFramework.apk必须放到System分区这种富含商业深意的技术设定。这体现了一家了不起的商业大公司,在拥有那样的领导人、那样的工程师文化的情况下,仍然也不得不时常屈服于逐利的本能需求。

篇幅头重脚轻,非是想对Google多加指责,对国内手机厂商随便说说。实是写到后面,精力不济、吐槽不能。

最后说下身份。我是某国内手机厂商的Android系统平台开发人员(仿佛看见一盆盆狗血往头上喷来),视角与常人不同,一些观点也难免受到自身立场影响。

技术和阅历有限,欢迎指正。

相关文章

网友评论

  • 三棵柚子:一个碎片化的技术问题 ,硬是被你解读成了系统级别的话题, 搞得我看半天才知道这不是讲技术的!!!!
  • 一寸光阴啦啦啦:说的不错,理解的很深刻,厉害
  • chysx:学习了
  • 谭冉冉:毕竟是免费的东西
  • bawanglb:文章不错,点个赞,但说真的,如果没有墙,个人认为google service是非常好的东西,不仅在统一方面,而且在提升android竞争力,整合力,改变普遍用户的使用习惯的好东西。现在国内市场杂乱,各搞各的,难道不是碎片化的体现么?
  • BFouAw:如果没墙体验会好很多。
    IOS 有app store ,Google有Google play ,这有什么不对?有一些Google的api,例如Google的gcm是为了考虑耗电量什么的加了一个统一的推送服务,然而由于众所周知的原因,国内访问Google不畅,导致Google服务被阉割,至此安卓在国内的体验与碎片化比国外差很多。如果把Google服务不置于system,那例如推送服务这种可以统一起来降低耗电量提高用户使用体验的服务如何统一?要每个厂商都搞一个?然后每个应用再搞一套?
    再说Google play,如果没有Google play,那么审核应用安全、保证安卓系统安全这要如何统一体验?每个厂商都搞个XX store么?安全性如何保障?看看国内的市场乱象就知道了。
    为了提高用户体验,统一和开源并不矛盾。
    不要把墙的错误归咎于Google身上。如果硬要把墙的错误归咎于Google的错误,建议你查下斯德哥尔摩综合征。如果你站于你们国内手机厂商利益的角度,也不要混淆视听。
  • f14dff8b531b:整篇行文比较混乱,google service被去除后,只是google的相关应用无法使用。
    一寸光阴啦啦啦:好多应用都闪退好吗
  • 命运挚爱勇者:你是魅族厂商???
    命运挚爱勇者:@匿蟒 哈哈,开玩笑的,文章很受用
    匿蟒: @命运挚爱勇者 不是。而且,这不重要。
  • 云华兄:看君一席文,胜查百度十年工 :smile:
  • ea0e4faf77c5:作为一个App层的老油条 喜欢你的文字 :heart:
  • 86f645258b55:因为笔者的的这篇文章注册的简书. 十分感谢,收益良多. 楼上的几位回答也很精彩. 我从一个海外app普通开发者的角度来说, 我认同是google造成的今天这个局面. 但目前也只有google能从新规范这个市场. 如果所有的apk都必须从google play store下载, 开发人员的收入也会显著增加的. 至少市面上的破解版模仿版之类,才是android开发者最大的敌人.
    匿蟒:@brady 找我推荐书,无疑是找错了人,我看的大多是网络小说,营养偏低。
    在简信上给你推荐了一些。
    86f645258b55:@匿蟒 喜欢你这种有态度的文笔. 作者的阅历和涉猎让我佩服. 感觉你平时阅读量很大, 几万字的科学散文行云流水. 不知道可不可以推荐 几本你喜欢的书 哪个方面的都可以.
    匿蟒:@brady 感谢你的认同,虽然简书不会给我发钱。 :smile:

    Google Play Store,在国外有一统天下之势。而纵观全球的Android APK分发,主要是包括国内那一群,Play Store也的确做得非常好,无论是用户的数目、内容的管理、还是功能的扩展。
    不过,Google的这个Store,是应该与Apple的那个Store有更多不同的。App Store是独霸天下,中心化管理,审查严格,统一分发。而如果Play Store是Android的唯一,和封闭的Apple有什么分别?Android和iOS,各有优缺点,它们之间最好保持各自的差异化,给用户更多的选择。
    就手机而言,iOS是全封闭的生态,Windows Phone是闭源兼容,Android是开源兼容。三者道路不同,以Android最为开放。所以,从设计理念来讲,Android本就应该允许第三方应用市场,与Play Store公平竞争。
    比Android更开放的情况也有,比如早期PC的Windows上,几乎没有分发可言。要软件,自己去买碟片,或者去网上搜索。要知道,连Linux的各大发行版都有默认的包管理器,而早期Windows却什么也没有。当然,这更多地是一个缺点,但也确实是为什么我们还离不开它的一个原因。

    破解版、模仿版,这是两个问题。前者在PC上通常称为盗版,后者通常称为抄袭。这两个问题都与应用分发无关,因为就算是最封闭的iOS、Mac OS系统,也会被破解,俗称“越狱”、“黑苹果”。

    破解,是一个无解的问题。
    从PC时代就开始猖獗,甚至蔓延到了掌机、家用机等电子游戏平台。有人愿意无偿地花费时间和精力去破解其防盗手段,并且免费提供给普通用户,这真是一种令厂商很无奈的态势。甚至,经常能在网上搜索到正版用户主动分享的序列号,这又能怎么解?
    就我而言,我在掌机、家用机上,基本没玩过正版游戏。这是否减少了Nintendo、Sony、Microsoft这些硬件商,以及CAPCOM、SQUARE ENIX、KONAMI、UBISOFT等游戏厂商的收入?实际情况是,如果游戏不是近乎免费,我根本连游戏机都不会买,因为我连游戏机都买不起!(至于我这个买不起游戏机的学生是怎么买的,这真是一个伤心的话题。我没有卖肾,只是有计划地挨饿而已。)
    当然,最终我意识到这样是不对的。我近期在PC上玩的游戏,要么是免费的,要么是付费的正版。当年欠暴雪、大宇的钱,勉强算是还了。现在从操作系统到应用软件,要么是付费的,要么是免费的,要么是开源的,最不济的也还在试用期内。
    我的转变,不是因为我成为了程序员,而是因为我有了稳定的收入,买得起了。(另一个原因是,为了保证稳定的收入,我已经没有太多额外的时间和精力来玩那么多游戏了。)
    破解的问题,终究是一个由经济条件所影响的观念问题。不过其实也不用太纠结,因为对开发者实际造成的经济损失,未必有想象中的那么大。

    模仿,是另一个无解的问题。
    如果说破解版还能在分发上进行一定的法律限制,比如KT的一封律师函致使3DM的鸟姐决定从今年(2016)春节起不再进行破解,那么模仿就真是毫无办法,因为知识产权法不保护游戏规则、软件功能这些太抽象的东西,只保护外观设计、代码著作权等。
    像《QQ英雄杀》模仿《三国杀》,卡牌、人物完全不同,只是规则一样。而如果要说规则,《三国杀》《海贼杀》还是和《BANG!》学的呢!我没有玩过《BANG!》,即使从一开始就知道这些,我也会喜欢《三国杀》,因为它有我喜欢的文化。
    如果说破解版是民间破解大神的锅,喜欢破解版是中国(以及其它欠发达国家和地区)用户的原罪,那么模仿版无疑是“友商”的失德。但是,永远不要指望“友商”不失德,因为他们还可以被称为“竞争对手”。从微软抄袭苹果图形界面的公案起(实际上他们都是抄袭施乐),就已经奠定了这个领域竞争的基调——只要法律不保护的,都可以模仿!(即使法律保护的,也还是可以模仿,只要赚钱后愿意补缴某种形式的“授权费”。)

    所以,破解版、模仿版,都不是Android开发者,甚至任何开发者的敌人。竞争对手才是真正的敌人,因为他抢了你的蛋糕;你是自己最大的敌人,因为你阻止了自己把蛋糕做大。

    ---

    当然,立场不同,所知有限,观点未必中肯。
    也许,我今年写App,明年就和你一起骂娘了。
  • 七号大蒜:666
    作为app开发和framework都做过的筒子收益良多
    更多想从用户的角度来说。

    题主提到一点国内外使用习惯的问题。我认为造成这种使用习惯差异正是GFW造成的,无法接入全球的公网,国内厂商早期只能摸索着用一套自己的,逐渐形成国内特有的习惯。但是绝大多数用户都是过的墙内生活,如井底蛙。都没用过google paly service,所以觉得应用商店很不错了。且不说play store有自己的审核机制,单从app自身权限来说,国内很多app是无良的。

    我的观点是,android相对ios使用体验上很大的一个优势就是google service。墙的作用在搜索引擎上和android上如出一辙,当下保护了国产既得利益也束缚自身发展。从时间线长远来看待,作用就像200多年前一样

    (逻辑有点乱,偶然看到顺道发表下自己看法) :disappointed_relieved:
    匿蟒:@七号大蒜 “题主”……暴露了你常混的地方。 :smile:

    GFW排除了Google Play Services、Play Store,的确如你所说,降低了中国用户的Android体验。
    从政策的出发点来说,与其是为了保护国产移动终端行业,不如说是封锁*.google.*域名的延续。

    至于结果是保护还是束缚,还得看国产手机的发展。
    就近几年的市场份额变化情况来看,的确是起到了保护的作用。但从软件质量、产业健康的角度看,以我目前知道的情况,是束缚更多一点,因为品质的差异太大。有时候,的确需要直接的对抗、碰撞,才能快速地拉近差距。
  • 665de3231012:屁股决定脑袋,你这样认为 Google 自然有自圆其说的理由。在我看来,Play Service 是解决 Android 兼容性问题的最大功臣。否则真等你们手机厂商主动去升级,用户不得等到地老天荒去了?国产手机在墙内开花在墙外怎么就吃不开?只是墙给了你们一种保护,真要大规模到海外市场特别是欧美市场,等待国产手机的会是数不尽的侵权官司;国内的环境帮你们把这部分成本给免了而已,国产手机所谓高端型号哪个卖的动?还不是靠廉价抢占市场,真放开了竞争完全不是你想的那么简单。
    665de3231012:@匿蟒 国内的市场和 app 只是在国内特殊的网络环境下的畸形产物,并不能以偏概全。华为中兴联想oppo 到全球当然能玩的转,因为他们是联盟成员,他们会去和 Google 一起打造 Android 环境。小米魅族锤子如果不改变,基本就只能靠着墙活着了。如果你关注 XDA,你会知道,最新版本的 Play Services 已经有基于 ADB 免 Root 安装方式了,这对于传言中的的 Play 入华来说的确是利好消息,只是上述三个专注与定制话 ROM 的所谓国内大厂如果不愿意,到时候会不会背后捅刀子还不好说。

    个人观点是口口声声说 Google 抢占了自己利益的厂商,无异于寄人篱下吃着别人的粮食却抱怨别人给你吃的肉太少。特别是在国内的情况下,有个别厂家的宣传的嘴脸简直已经到了无耻的地步,这种也就只能在不尊重知识产权的市场能够活下去。

    另外指出几点:

    国内厂商所谓的巨大利润来自于**壁垒

    通讯录是可以替换的,只有 dialer(具体说是接通后的那个界面)是不行的。

    Play 商店是分区的

    如果不是严重依赖 Google Play Services 的产品,如果不能用或者闪退的情况下,请先检查一下软件来源是不是正版(即使 binary 一样,软件来源非法的 app 依然为盗版)开发者检查是否在 Google Play 上付费,没有 Google Play Services 的 app 必然为盗版,崩溃无可指责。

    个人浅见,见笑了。
    665de3231012:@匿蟒 @匿蟒 非常感谢详尽的回复。

    我是一个app开发者,所以看问题的角度和你可能并不一致。Google Play Services 能够独立于 Android 系统本身进行更新:许多app至今还能支持4.1甚至2.3的老机器,UI 方面靠的 support library 功能方面则全靠 Play Services。目前除了 Play Services,几乎所有的你所说的『可替换的』方案都是手机 App 中集成地图、推送、游戏、登录等 SDK,权且不说这些从体验到功能到完成的质量完全不能和 Play Services 比,光是每个 App 需要单独绑定一个 SDK 就比让人觉得痛苦无比,这和 Play Services 的升级策略完全不能同日而语。如果你去看看统计数据,你会发现 Android API Level(或者说 Android 版本)的碎片化程度远比 Play Services 的高,绝大多数 Active User 的 Play Services 版本都在最新版本上,若是没有 Google 的这些努力,App 开发者只能对着用户手里打死也不换不升级的老机器叹息。

    我觉得你对 CTS 的理解是偏颇的,CTS 对于手机厂商来说并不是必须的,只要你不加入 OHA,你想根据 AOSP 做一个自己的系统,只和自己兼容,是完全可以的。CTS 是申请内置 Play Services 的必要条件,正是因为 Play Services 和 OHA 存在,才让 CTS 有意义。

    你说这种技术手段,直接掠夺了墙外相关组织的利益 Android 的局面在国外是这样的:要么跟着 Google 混饭,将来也许会成功;要么现在就死,你去投靠 WP 你去研发塞班都没有用,现在就得死。大家会用脚投票,没人会选择你的不兼容系统,而塞班早就显出颓势,WP 直到今天也扶不上墙,HTC 又不是没有出过 WP 最后怎么样了也知道,黑莓算自己搞自己的系统了吧,现在又如何了?

    如果没有 Play Services 强制厂商去做 CTS,手机厂商并没有义务也没有意愿去做兼容,局面会比现在分裂的多,那些半死不活的厂商可能早就死了几次了。再看看亚马逊,app 商店的功能不比国内任何一个厂商都完整么?付费应用,内购,一应俱全,现在又活的怎么样了?

    到了国内,这个情况就变了,因为没有 Google,没有 Play Services,没有强制 CTS。我不知道国内坚持跑 CTS 的还有几家,但是明显很大一部分是过不了的。看看国内那些并不面向海外市场的手机品牌,哪个不是想尽办法『撇清』和 Google 甚至和 Android 的关系,打着 『powered by MIUI』、『powered by Flyme』和 『powered by YunOS』的旗帜?这种行为到了规范的市场上,Google 会为它挡官司?高通会为其撑腰?

    也许在你们开发手机较底层的人看来兼容性可能是对于硬件的支持怎么样,驱动要不要改,API LEVEL 升级会不会推翻你们的东西重来;而在 app 开发者看来,兼容性是我每台手机最后出来实现同样界面功能的成本高不高,用户会不会用到不稳定的系统。当国内厂家把系统中 android.color.white 换成其他颜色的时候,当即使用了 v4、v7 的包发现某国内厂商居然不兼容的时候,当他们要求你去单独出一个特供版去兼容他们的 SB 的时候,当有些充话费送的手机连 Activity 也要阉割的时候,拿什么谈兼容?现在某些媒体谈 Android 必谈碎片化,但是他们没有真正了解过 Android 的开发,Android 对于屏幕尺寸,不同版本的兼容是很容易做到的,但是对于国内这种情况,只能祭出 F 开头的四字英文了。

    应用闪退的问题:的确是这些 App 不兼容 Android,为什么?因为开发者已经用脚投票了。兼容 Android 并不难,一个判断语句 —— services 版本过低去升级;services 版本ok 开启功能;没有services 关闭相关功能。开发过就知道,没有什么高难度的。为什么没人 care?因为对于这些厂商来说,没有 Play Servcies 的用户不值钱,你无法给他们推送,你无法给他们地图服务,你无法给他们最新的features,如果你想支持这部分用户的这部分功能,那么从收益角度来看并不划算。(如果你想用自己的推送服务器有两种方法 1. telegram 的方法,两套推送,服务器成本、维持 GMS 和自己的两套推送的成本,2. Facebook 的方法,只用自己的推送,对小于 Facebook 体量的公司无异于自杀,收益和损失完全不能比)。
    匿蟒:@allan1stgmailco “兼容性问题的最大功臣”一说,你并未解释。“否则”后面的内容,与此无关。
    兼容性问题,是本文的核心。以下三个问题虽然无关,但我也谈谈看法:

    1. 升级问题。
    Google的更新,主要分两种。一种是打补丁,主要是安全性更新。另一种就是系统升级。
    Android的系统升级,也体现在API Level增加。每一次,要么相当于Windows 8升级到Windows 8.1,要么相当于Windows 8.1升级到Windows 10——都是非常重量级的升级,而Android已经在8年内这样干了23次。
    对下游来说,升级成本有时会非常高。

    比如,4.4.2到4.4.4。看上去没什么变化,对用户和普通开发者来说都是如此。但是这俩版本恰好碰到了Android手机从32位到64位的跨越,可见现象就是市面上的顶配手机通常是3G内存(32位内存寻址上限是3.2G)。4.4.2时开发的手机多是32位的,而4.4.4时就开始转向64位,这对Java层来说变化不大,但是对驱动的C/C++来说则是天翻地覆——开发成本相当于重来。
    另外,这个小版本主要是Google安全性更新,同时带来权限收紧,部分以前能用的接口现在不能用了。比如高德地图开放给第三方开发者的一个API接口,在4.4.2上正常运行,在4.4.4上都无法运行。再比如一些第三方类库,某些接口一定会挂,导致所有依赖于这些接口的应用都无法正常运行。为了解决这些问题,在Java层也没有省事。
    所以,这样一个小版本跨越,竟然从上到下相当于重来一次!
    如果不是非常热门的机型,很多厂商是不会原因升级系统大版本的。这客观地造成了碎片化问题无法收敛,只增不减。
    “等到地老天荒”一说,确实如此。

    对版本比较敏感的Geek,通常都用谷歌太子Nexus。
    无论从工作还是从业余开发的角度来考虑,如果我要再购买一款Android手机,一定是Nexus。

    ---

    2. “在墙外吃不开”。
    其实在墙内也吃不开。
    当今智能手机市场,无论是中国还是美国,首屈一指的是Apple。如果只算Android阵营,那么得属三星。
    在美国市场,排第三的是LG。
    如果按照全球的份额算,华为、小米、联想、中兴,紧随其后。
    确实是“靠廉价抢占市场”。

    不过,从用户体验来说,并非一无是处。国内外除了“墙”,用户习惯也有较大差异。
    比如,中国人的文字、姓名,与国外差异较大。大多数厂家自行定制的通讯录软件,在使用体验上都比Google原生的,更符合中国人的使用习惯。但是这种优势,出国也就只能在部分华侨那儿体现了。
    量身订制的衣服,总比商店里买的合身,但是难以卖给别人。
    全球这么多个国家和地区,这么多不同语言、不同习惯的人群,它们需要的未来,究竟是大一统,还是差异化?仁者见仁,智者见智。

    ---

    3. “数不尽的侵权官司”。
    其实,这只能说小米这类从软件切入手机的公司。
    对手机来说,虽然也有“滑动解锁”、3D Touch这种专利竞争,但是要么买、要么避开,这都好办,属于边境摩擦级别的小冲突。手机界可能出现的专利大战,一定是在移动通讯领域。

    像华为、中兴这样,从通讯领域切入手机的公司,专利储备只多不少。除了高通、爱立信等非厂商,其它厂商(包括Apple、三星)在全球任何地方,只有可能被打,不可能打他们。
    想联想这样的,虽然从PC切入,专利储备不足。但在收购Motorola后,也和其前买家Google达成了一些授权协议,攻取不足,自保有余。算是成为了合格的全球玩家。
    其它如小米等,只能靠高通撑起的交叉专利授权的保护伞。

    现在,华为、中兴、联想是合格的全球玩家;小米、魅族等,虽然还不合格,但是抱高通大腿还能玩(抱联发科就玩不起)。
    如果开放竞争(去除墙、专利、关税等保护性措施),会受到冲击,但未必会输(比现在的份额更差)。这和很多其它行业的格局,完全不同。
  • kotlon:作为一个android有必要了解领域内的背景
  • 49847463b4c3:很喜欢
  • 6cc2a6c73a3e:涨姿势! 不过相对于厂商、第三方应用商店, play商店对应用质量的控制应该会好很多吧(话说要回归了?)。不过文章讲的是碎片化和兼容性(︶^︶)
    6cc2a6c73a3e:@匿蟒 少侠侠说的有理啊!
    匿蟒:@Taosky 应用商店是一个平台,并不是Google才有能力做好一个应用分发平台。
    这种统一管控模式的应用商店,其利弊在Apple的App Store里已经显然了。Google做的Android并不是另一个iOS,那么为什么要做一个App Store的翻版呢?

    对碎片化的Android来说,去中心化(decentration)才是Google Play应该做的尝试。
    就拿字符串来说,Google Play应用以英文为主,很多不包括中文。那么对中国来说,这就不是一个优秀的应用商店。对欧洲其它国家也有类似问题。
    此外,很多应用使用了在线的Google服务,比如Google翻译之类的。这种应用即使进入中国,也不能正常使用。
    ——一个中心化(centration)的应用商店,根本不足以应对全世界的要求。Google Play,也仅仅能解决first world problem。为了提高用户体验,多个应用商店相互竞争,才是最好的格局。
    (其实Apple的App Store也不止一个,至少中国的App Store是独立的。)

    对普通开发者来说,去中心化的应用商店,是否能保证方便的应用分发,而不是一个个去发布?
    其实对所有内容生产者来说,发布自己的内容,从来都是依存于平台的。
    传统的,比如写学术论文,要么发Nature,要么发Science,或者其它。谁见过都发的?
    比如这篇文章,我只发在了简书,也没去各大媒体贴一遍。
    对一个应用来说,发布到自己想发的平台就好了。如果写一个中英的应用,结果被分发到法国去,反个差评回来,找谁哭去?

    多个商店的推荐系统,能给真正的好应用跟多出头的机会。全球应用的质量,不是一个全球统一的机构能管控的。
    如果一个开发者写了个好应用,那么他冲进Google Play前十的概率大呢,还是在十个应用商店中的某一个冲到前十的概率大?

    :smile:

本文标题:Android碎片化与兼容性问题的元凶

本文链接:https://www.haomeiwen.com/subject/fpqncttx.html