本文转载自 http://blog.csdn.net/ljp1205/article/details/77684550
Android O 前期预研
之前一直传言android O的推出会包含有两部分的主要功能:
- 谷歌打算彻底解决Android版本碎片化的问题,会在Android O上推出一个新的框架设计来解决这个这个升级问题。
- 推出Android for Automotive ,正式进军汽车车载市场。
而这两部分对我们的工作影响会比较大,第一部分可能会导致我司现存的一堆现有的工作会在以后可能不存在了。因为整个系统升级项目的工作量大大减轻。第二部分会引领出一个新的智能车载时代,所以出于这个原因,有必要尽早对Android O做一些前期调研。
Android Treble 计划
Android O 引入一个新的计划被命名成“Android Treble ”,按照谷歌的定义,这个计划的目标是”The Android 8.0 release includes Project Treble, a major re-architect of the Android OS framework designed to make it easier, faster, and less costly for manufacturers to update devices to a new version of Android. Treble is for all new devices launching with Android 8.0 and beyond (the new architecture is already running on the Developer Preview for Pixel phones).” 简单翻译一下就是“该计划的主要工作就是重构Android OS 的framework,让Android设备制造商能够更快,更容易,更低成本的去升级Android 版本”
Google已经正式release了Android O AOSP r4版本,我们已经可以通过公司镜像/google 官方镜像/国内其他Android 镜像下载Android O AOSP代码。我们打算先编译一个Android O 的angler版本(Nexus 6P)。我们先来比较下Android O的angler版本与Android M的hammerhead版本的(Nexus 5)差异:
- 差异一,Binaries Driver 打包方式差异,我们都知道Google会推出一些官方手机,可以直接运行Android AOSP镜像,但是为了支持这样一个功能,Google都会提供 Binaries Driver包,这些包都是硬件相关的驱动或者HAL库。在Android M的hammerhead版本上,我们看到Binaries Driver 的组织方式是这样的:
我们能够看到Binaries Driver 打包里有各种so库,apk文件,bin文件跟各种配置文件。
但是我们看到Android O的angler版本的Binaries Driver 是这样的:
除了Android.mk文件之外,我们只能看到一个vendor.img镜像,除此之外再没有其他so文件,bin文件跟各种配置文件。
- 差异二:编译出的镜像有差异,从Android O angler版本编译出的结果来看,如下图所示,编译结果中多出一个vendor.img的镜像。而在Android M的hammerhead版本的编译结果中是没有的。
vendor.img 镜像解压:
- 将Android sparse image格式的vendor.imag转换成e普通格式:simg2img vendor.img vendor.img.ext4
- mount 镜像:sudo mount -t ext4 -o loop vendor.img.ext4 /tmp/vendor/
我们可以看到vendor镜像中的内容:
与System.img中的目录结构很类似。从直接现象来看,我们有理由猜测Android O与之前的Android 版本相比,多出了一个vendor.img分区。接下来很多的分析都是围绕vendor.img镜像来展开。vendor.img镜像也是Android Treble计划最重要的核心与成果。
Android O之前版本的框架
在此之前的Android 系统架构当中,Android Framework 与Android HAL是打包成一个system.img的,而且Framework 与HAL之间是紧耦合的,通过链接的方式使用相应的硬件相关so库。老版本的android 的系统框架当中framework与HAL之间的一般架构框架是:
所以每次Android framework的升级需要对应的Android HAL升级。所以这样每次Android 升级都需要Android 设备制造商投入大量的人力物理去升级相应的Vendor HAL Implemetation.
Android O及之后的版本的框架
在Android O以及以后的版本当中,Android 更新了新的框架设计在新的框架设计当中,引入了一套叫HIDL的语言来定义Freamework与HAL之间的接口,新的架构如下图:
在下一节中,我们将来详细了解HIDL这个新概念。跟以往的Android 版本相比较,Android O里使用HIDL来解耦Android Framework 与Vendor HAL Implemetation之间的关系,从而简化降低Android系统升级的影响与难度。并且目前看起来,Android Framework与Vendor HAL Implemetation会存放在不同的分区当中,Android Framework会在system分区当中,而Vendor HAL Implemetation会在一个新定义的分区(Vendor.img)当中,这样刷新的system.img 才不会影响到Vendor HAL Implemetation,所以在Android O中的升级方式变成以下方式:
在这里先大致介绍了下 Android Treble计划的背景,以及比较High Level的介绍了下大致框架,后续会从更加详细的角度研究下 Android Treble计划。
后续会有以下部分:
- Android HAL 类型
- HIDL的相关介绍
- VNDK相关Vendor Native Development Kit