Android的兼容性问题剖析

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公众号

时间: 2024-08-01 11:48:46

Android的兼容性问题剖析的相关文章

Android API兼容性指南

Android API Levels 在本文中 API的级别是什么? 在Android中使用API级别 开发者需要考虑的内容 应用程序的向前兼容性 应用程序的向后兼容性 平台版本和API级别的选择 声明最低API级别 针对高版本的API级别测试 使用临时的API级别 通过API级别进行文档内容过滤 参见 manifest element 当你开发你的Android应用程序时,了解该平台API变更管理的基本方法和概念是很有帮助的.同样的,知道API级别标识以及该标识如何保障你的应用与实际硬件设备相

Android API兼容性栗子

Android 版本更替,新的版本带来新的特性,新的方法. 新的方法带来许多便利,但无法在低版本系统上运行,如果兼容性处理不恰当,APP在低版本系统上,运行时将会crash. 本文以一个具体的例子说明如何在使用高API level的方法时处理好兼容性问题. 例子:根据给出路径,获取此路径所在分区的总空间大小. 在安卓中的文件存储使用参考中提到: 获取文件系统用量情况,在API level 9及其以上的系统,可直接调用File对象的相关方法,以下需自行计算 一般实现 就此需求而言,API leve

Android 断点续传的原理剖析与实例讲解_Android

 本文所要讲的是Android断点续传的内容,以实例的形式进行了详细介绍.        一.断点续传的原理        其实断点续传的原理很简单,就是在http的请求上和一般的下载有所不同而已.        打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:        假设服务器域名为www.jizhuomi.com/android,文件名为down.zip. get /down.zip http/1.1 accept: image/gif, image/x-xbitmap,

《深入理解Android:Telephony原理剖析与最佳实践》一1.3 Android Telephony框架结构

1.3 Android Telephony框架结构 前面对Android手机操作系统整体框架结构及每一层进行了简单的分析和说明,相信大家对Android智能手机操作系统有了一些基本的了解和认识.结合前面Android的系统整体框架,我们接着学习Android Telephony涉及的框架结构,如图1-3所示. 通过图1-3所示不难发现Android Telephony框架结构的一些规律,总结如下. Android Telephony的业务应用跨越了AP和BP.AP与BP相互通信,符合前面介绍的智

《深入理解Android:Telephony原理剖析与最佳实践》一1.2 Android系统架构

1.2 Android系统架构 前面学习了智能手机的基本硬件结构,可以通过功能手机与智能手机的特点和区别从本质上认识它们.Android智能手机操作系统作为运行在AP上的开源智能手机操作系统,其系统架构是什么样的呢?我们先看看图1-2. 通过图1-2不难发现,Android手机操作系统是一个基于Linux Kernel的分层智能手机操作系统,其共分为4层,从上到下分别是Java Applications(应用层).Java Frameworks(应用框架层).User Libraries(系统运

《深入理解Android:Telephony原理剖析与最佳实践》一2.2 Android源代码下载及编译过程

2.2 Android源代码下载及编译过程 前面完成了Ubuntu.JDK.Android SDK的安装和配置,接着开始下载和编译Android 4.0源代码,这个过程简单但花费的时间比较长,请读者先有个心理准备. Android 4.0的代号为Ice Cream Sandwich,简称ICS,中文名称冰淇淋三明治. 2.2.1 工作目录设置 本书采用ICS名称的文件夹作为Android 4.0源代码的根目录,在用户根目录下新建代码根目录ICS文件夹,并设置此目录为工作目录,在.bashrc中增

《深入理解Android:Telephony原理剖析与最佳实践》一2.5 使用Source Insight方便阅读C/C++代码

2.5 使用Source Insight方便阅读C/C++代码 Android源码中有非常多的C/C++代码,Source Insight是当前比较流行和方便使用的C/C++代码阅读编辑工具,我们选择它来建立Android C/C++代码相关的工程. Source Insight是基于Windows平台的C/C++代码编辑工具,要在Ubuntu平台上使用它,需要Wine工具的支持. 2.5.1 安装Wine 首先安装Wine.依次单击Applications→Ubuntu SoftWare Ce

Android系统文件夹目录大剖析

        本文介绍的是Android手机系统的文件夹结构,帮助大家更直观地了解系统,作为查询工具加入收藏夹还是很不错的!!\\system\\app这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件.在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\\data\\文件夹中.  下面是详细的介绍: \\system\\app\\AlarmClock.apk 闹钟  \\system\\app\\AlarmClock.odex\\ system

《深入理解Android:Telephony原理剖析与最佳实践》一3.4 广播

3.4 广播 广播(Broadcast),看字面意思可以联想到车站.商场等都有广播,对于广播来说,发送方并不需要知道广播接收方的数量及接收到广播如何反应,这些都是接收方的事.那么,在Android 平台中的广播是否与生活中的广播相似呢?答案是肯定的,发送方仅需要将广播内容完成发送,而接收方过滤自己需要的广播信息和内容,然后进行处理,接收方信息是发送方不知道的. 3.4.1 Android 系统中的广播 Android 系统中有非常多的广播,当系统启动或应用运行时便会向 Android 注册各种广