揭秘:阿里云OS和Android的主要区别是什么

如今网络机顶盒和智能电视预装系统已经被阿里云OS占据了半壁江山,相对于原生Android系统来说,阿里云OS因其高度定制化的统一解决方案等诸多优势受到了众多盒子及电视品牌青睐,很多盒子商品介绍时也会可以注明采用阿里云OS,也有特定的更新版本号,似乎,它并非基于Android系统,那么阿里云OS究竟是从何而来?它和Android原生系统有何区别呢?一起来看看。

其实关于阿里云OS和Android之争早在两年前就开始了,Android开发领头人Andy Rubin在其Google+主页中这样写道:“阿里云系统采用了谷歌Android系统的运行环境,明显是由Android系统修改得来。”Andy Rubin还称,事实是,阿里云系统包含了Android中运行环境,明显是从Android中演变而来,但无法与Android兼容。基于Google对阿里云网站上应用的分析,这个平台尝试与Android兼容,但未能成功。

那么,阿里云OS到底是不是Android以外的东西呢,通过一些技术手段可以来验证一下,我们使用某使用阿里云OS的刷机包来验证(为避免广告之嫌,就不指出是具体机型了)首先我们将.zip包打开看看。

以下是解压包的目录结构,是不是似曾相识?

我们发现,根目录下是一个boot.img,这就是Android系统的bootloader(BL),也就是启动分区。另外有个system目录,这就是Android系统的system分区,就目前的样子和Android几乎没有区别。进入system目录往下看:

阿里云OS在这里和Android ROM的目录结构是一样一样的,如果方便,大家可以安装RE管理器打开android系统目录对比一下。核心的几个目录:

app: 存放ROM预装的App,非核心App

bin: 系统进程的目录

framwork: Android Framework目录,就是Android应用程序运行所需要的库文件的目录

lib: so库文件目录,相当于Windows的system32目录

接下来我们打开app文件,来看看程序后缀名:

终于找到区别了,这里边所有的app都是以.lar为后缀的,而我们都知道,Android下所有的app都是以apk结尾的。这是我们找到的第一处阿里云OS和Android的不同,因为apk是Dalvik虚拟机管理应用程序的文件格式,而阿里云开发了自己的虚拟机,用lar文件来管理。lar文件和apk文件有什么不同?我们知道apk文件其实就是一个zip文件,用WinRAR可以直接打开看,那lar文件呢?用WinRAR果然也可以直接打开:

但凡接触过Android开发的人一看到这个目录结构就会发现,它和apk的目录结构基本上是一模一样的,除了Android应用的classes.odex文件变成了classes.lex。那所谓的lex文件是不是就是把dex文件换了个名字呢?我们用二进制比较一下:

左边的是Android应用的odex文件,右边的是阿里云应用的lex文件。显然,二进制编码告诉我们,他们的文件格式已经完全不一样了。

至此,至少app的不同已经看出来了,我们再来看系统核心进程有什么不同。进入到/system/bin目录:

熟悉Android系统的人一眼就能看出来,am,app_process之类的名字都是Android核心进程的名字。多出来了几个:cloudserver, chpasswd.cgi之类,看来这就是阿里云所谓的“云服务”的核心进程了。

总结一下,文件的比较就到这里,那现在基本上可以下结论了,一个完整的Android系统,包括以下几个部分:

1. bootloader:用来启动操作系统

2. kernel: 系统内核

3. 核心进程,就是 /system/bin 下面那堆东西

4. so库: 系统运行基础,就是 /system/lib 下面那堆东西

5. Android虚拟机,所有的上层应用都是靠虚拟机来运行的

6. Android Framework: 所有的上层应用都是通过调用Framework来实现功能的,就是 /system/framework下面那堆东西

7. 上层应用,比如说桌面Launcher, 拨号,短信,通讯录之类,就是/system/app下面那堆东西

对于阿里云OS来讲,在上面7个部分中,虚拟机用的是自己的,上层应用是自己定制的,另外额外加了一个“云服务”,其余部分都是用的Android的。它和Android是什么关系已经很清楚了,也就是说阿里云OS大部分都是基于Android的,本质上我们更倾向于它是Android衍生版,而不能称之为独立OS。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注