Android的兼容性问题剖析-阿里云开发者社区

开发者社区> 开发与运维> 正文

Android的兼容性问题剖析

简介: PC是X86构架,主要生产厂是Inter和AMD,android智能手机基本上都是ARM构架,主要生产厂家有高通、三星、NVIDIA等,也不是很多,所以架构方面应该不是导致碎片化的主要原因才是啊?或许我理解的问题?架构方面是一个重要原因。

image

1.PC是X86构架,主要生产厂是Inter和AMD,android智能手机基本上都是ARM构架,主要生产厂家有高通、三星、NVIDIA等,也不是很多,所以架构方面应该不是导致碎片化的主要原因才是啊?或许我理解的问题?

架构方面是一个重要原因。

x86架构从当年8086开始,到如今的x64的64位平台,能做到汇编指令完全兼容。

再看看ARM架构有多混乱:

ARM处理器内核列表

x86架构的字节序是固定的,而ARM架构的字节序都是可变的,字节序就是大小端的意思,比如一个32位的数据:0x12345678,在x86架构下,内存里永远都是0x78 0x56 0x34 0x12,而在ARM架构里,可能是前者,也可能是0x12 0x34 0x56 0x78.

字节序本身没有什么优劣之分,但对于开发人员来说,可变的字节序意味着移植机器代码是有困难的。

2.各厂商的ROM应该只是做一些二次开发,不会动核心部分吧?而APP的开发不是只需要跟核心匹配就行了么?就像WIN 2000和XP一样,同样的NT核心,程序基本可以兼容。

安卓系统基于的内核是Linux,Linux不是微内核架构,而是宏内核,内核里包含的东西很多。而Windows是一个近似微内核的架构,微内核的好处就是驱动什么的可以很容易改变以适用的变化(准确的说Windows确实不是完全微内核,但比Linux而言内核确实很小)。

宏内核的缺点就是如果硬件改变的太大,很多时候内核要跟着变动。而且由于ARM平台本身硬件上差异也很大,导致厂商修改驱动的做法很频繁。如果Linux是一个微内核结构,那么可能兼容性就不是现在这样子,但可惜Linux不是。

当然,如果存储空间足够大,那么宏内核也没什么问题,PC端的Linux兼容性不都是很好吗?是的,但移动平台的存储空间不是足够大的,所以,没有见到哪家厂商把各种驱动都装到手机上。所以各个厂商之间的安卓系统无法直接兼容。

另外,众所周知android是一个开源系统,而windows则是一个闭源系统。开放系统的源代码可以让众多手机厂商参与系统的定制。但定制ROM会不同程度地修改原生ROM的API,这种现象便是碎片化。碎片化势必会让google play中的app在这些定制ROM里出现兼容性的问题。而windows是闭源系统,内部的API其他厂商无权修改的,所以不存在这个问题。

3.关于中间层,我的想法是:

①由Google主导开发以消灭碎片化。
②类似.NET Framework和JAVA这种,JIT编译。就是不知道性能开销如何。
③Google应该会不断的升级系统,而Android的开放性决定了终端的多样性,所以中间层还是有价 值的。

第一条,Google在做了。
第二条,也是安卓现在的做法。要是没有JIT,安卓的也就基本没有多少活路了。Java的效率会越来越高,这最终会消除兼容性的问题,但消除不掉的是从硬件到驱动这一层的差异。

最后我想补充一条:各个厂商不开放硬件规范也是一个大问题,比如魅族想把系统移植到小米手机上,前提是魅族知道小米的BSP(board support package)代码,不然再厉害也没有用。而PC平台上大多数厂商都是开放自己的硬件规范的,主板厂商用的芯片组基本上就是那几个,并且都跟微软达成了联合开发的协议。这一点是人为制造的兼容性障碍。

总结一下:

Windows的兼容性成功有几个原因:硬件指令完全兼容、存储设备足够大以存放各种兼容代码、微内核结构方便扩展;Linux在PC平台的兼容性成功是基本跟Windows相同的,只是没有微内核结构。

但到里移动平台,因为硬件指令不能完全兼容,硬件种类又很多,所以如果要兼容各种设备就需要大量的全套的驱动,而移动平台存储设备又太小,你希望你只有8G内置存储的手机里有7.8G都放着各种驱动吗?并且内置存储小的手机又根本放不下,所以要想活路,只好暂时放弃兼容性,把兼容性的问题留给JIT去做。

当然,这种趋势最终会被打破,移动设备的内置存储总有一天会很大,硬件厂商总有一天会统一,那么到时候,就看设备厂商是否愿意开放所有的驱动代码了。

反驳几个观点:

有人说Windows也有兼容性的问题,但请问:兼容性再有问题也不会出现Windows从dell电脑上拿到联想电脑上就不能运行吧?安卓你试试把小米系统移植到魅族手机上?

早期的硬件配置确实麻烦,跳线不对机器都起不来,但用户在正确指导下是可以配起来的,但现在呢?各个厂商封闭自己的BSP代码和硬件规范,用户能把小米系统移植到魅族手机上吗?

还有人拿分辨率说事,DOS时代到WIN7,分辨率变化了多少了?分辨率只是影响显示的样子,说白了就是好看跟不好看而已,现在安卓系统面对的可不仅仅是好看不好看的问题。

有人说PC的接口规范是为Windows准备的,那您可真让Linux汗颜了。Windows驱动五花八门难道都是自己变出来的?都是人写的。移动平台的问题是每个厂商都想只做自己的驱动,别人的驱动我才不管呢,当然想管也管不了,后果就是一个硬件平台定制出来的东西完全不兼容另一种平台。

还有人说ARM没有兼容性问题,确实,现在主流手机都是ARM7指令集,ARM7是没有兼容性问题,但别忘了ARM指令集还有ARM4呢,这个跟ARM7差异很大的。另外大小端的事情怎么解决?虽然ARM默认是小端的。

Windows系统有问题,硬件有变化,可以升级驱动,为什么可以升级驱动,因为微内核容易升级驱动,驱动变动对微内核影响很小,并且驱动再大也不会出现硬盘里放不下的程度。Linux的宏内核导致稍微大点的改动就要重编内核,请问有多少人会重编Linux内核的?再看有多少人会给Windows装驱动的?

评论里有人说到Linux在PC上也有碎片化的问题,这个确实存在的,但现在Linux在不同PC硬件之间迁移基本上没难度,手机系统呢?
MQC测试平台是为广大企业客户和移动开发者提供真机测试服务的云平台,拥有大量热门机型,提供7x24全天候服务。

我们致力于提供专业、稳定、全面、高价值的自动化测试能力,以及简单易用的使用流程、贴心的技术服务,并且帮助客户以最低的成本、最高的效率发现APP中的各类隐患(APP崩溃、各类兼容性问题、功能性问题、性能问题等),减少用户流失,提高APP质量和市场竞争力。

联系我们:
 网站地址:https://mqc.aliyun.com/
 开发者交流旺旺群:335334143
 客服邮箱:mqc_group@service.alibaba.com;
更多精彩技术分享 欢迎关注 MQC公众号
17

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章