1、 HAL硬件抽象层

下图是最新的Android系统架构:

Android系统基于Linux系统内核,应用层使用Jave或Kotlin语言编写,底层控制设备的是Linux内核,Linux系统采用C语言和汇编语言编写,所以控制设备的代码是C/C++语言。

那么应用层软件如何控制设备呢?Linux会提供控制设备的C/C++接口,也就是so动态库(一种ELF文件)。然后应用软件的Java通过JNI(它允许Java代码和其他语言写的代码进行交互)调用so库,那么so库就会继续往下调用设备,这些设备包括Audio,Camera,BlueTooth等等

什么是动态库?只有当程序运行时,才会把需要的代码拷贝到内存中,供别的程序使用

比如小米手机上的拍照软件调用摄像头硬件的过程:

在Android 7.x及更早版本中没有单独的硬件接口层,硬件接口的底层代码在Android Framework框架中实现,与Android操作系统框架没有分开。这样造成的问题是设备制造商必须更新大量代码才能将设备更新到新版Android系统

Android O版本新增了Project Treble,最重要的改变就是:Android将HAL层和framework层分开了,增加一个单独的硬件抽象层(Hardware Abstraction Layer),独立负责向Android系统提供硬件接口

这样的好处是:

  1. 统一管理,避免硬件差异化带来的影响(硬件设备不管如何变化,都可以不影响HAL层接口代码)
  2. 让设备更容易、更快速地升级Android系统(Android系统与底层分开)

HAL还有一个好处是:可以让设备商对一些敏感的代码或专利技术进行保护。Android系统的内核是Linux,Linux是一个开源系统,但是设备商可以把不愿意公开的代码以二进制方式放在HAL层,它相当于是一个黑箱,只需对外提供接口即可。这样既不会泄露自己的代码,又可以让别人使用自己的产品

比如小米公司对自己的手机摄像头有一套自己的算法优化,这些内容不能公开,但是又必须让手机上其他公司的软件,比如美图秀秀使用摄像头。就可以把算法代码放在HAL层,对外提供接口给Android系统里的拍照软件使用

2、VTS测试套件

Android系统架构在经过上面的改动后,提供了一套供应商测试套件(VTS)对新的供应商接口(HAL层接口)进行验证。VTS可以自动执行HAL和操作系统内核测试,即便是没有HAL层的环境也适用(由此看出HAL层接口只是从android framework中分开,而不是以前没有)

VTS( Android Vendor Test Suite) 由一套测试框架和测试用例组成,目的是提高安卓系统(如,核心硬件抽象层HALs和库libraries)和底层系统软件(如,内核kernel,模块moduls,固件firmware等)的健壮性,可依赖性和依从性

CTS测试,确保APP开发者编写的同一款程序可以运行在不同系统版本(向前兼容)、不同硬件平台、不同厂商制造的不同设备上。VTS类似CTS,通过对Vendor Interface进行测试,确保同一个版本的Android Framework可以运行在不同HAL上,或不同Android Framework可以运行在同一个HAL上

目前GMS认证包括CTS测试和GTS测试。后续GMS认证必须依赖VTS、CTS、GTS测试

GTS测试:手机出口到国外,并且通过运营商出售,就i必须通过GTS测试

GMS认证:手机没有GMS认证,那么对于手机出口商而言,生产的产品走不了运营商通道,所以在欧美等由运营商主导的手机市场,GMS认证是十分必要的。但是没有GMS认证,Google也不会做限制,只是进不了运营商市场,第三世界市场,出于成本考虑(GMS认证需要收费),也就没装GMS认证


参考:
https://zhuanlan.zhihu.com/p/468704485
https://cloud.tencent.com/developer/article/1043337
https://blog.csdn.net/qq_40748967/article/details/125931021

Android系统的VTS测试套件介绍相关推荐

  1. Android 8.0 VTS 测试 FAIL 失败项解决记录

    Android 8.0 VTS 测试 FAIL 失败项解决记录 Qidi 2017.08.09 (Markdown & Haroopad) 注意:本文基于 Android 8.0 进行分析. ...

  2. Android 系统(58)---Android 系统 UI - SystemUI之功能介绍和UI布局实现

    Android 系统 UI - SystemUI之功能介绍和UI布局实现 前言 Android ROM开发过程中,难免会涉及到对SystemUI的修改,之前做过一些这方面的工作,现在整理下,准备按照如 ...

  3. Android 8.0 VTS 测试 FAIL 项解决记录

    本文是转自https://zhuanlan.zhihu.com/p/28426650 注意:本文基于 Android 8.0 进行分析. 1. 前言 这篇文章所记录的是我自己在 Amlogic 平台上 ...

  4. Android 系统属性(SystemProperties)介绍

    我们在开发过程中有时需要使用系统属性,例如获取系统软件版本,获取设备名名称等:有时也需要设置自己的属性,为了全面的介绍系统属性,本文将基于Android 10(Q)来介绍Android的属性使用,围绕 ...

  5. Android系统下载管理DownloadManager功能介绍及使用示例

    一.DownloadManager简单介绍 DownloadManager是系统开放给第三方应用使用的类,包含两个静态内部类DownloadManager.Query和DownloadManager. ...

  6. Android 系统 UI - SystemUI之功能介绍和UI布局实现

    前言 Android ROM开发过程中,难免会涉及到对SystemUI的修改,之前做过一些这方面的工作,现在整理下,准备按照如下章节介绍SystemUI.借此对SystemUI做下整体性回顾.  -S ...

  7. android+集成北斗定位,基于Android系统的北斗定位通信手持设备研究

    摘要: 卫星导航系统广泛应用于交通运输,军事活动,野外作业,抗险救灾等重要领域,其重要程度关系国家重大利益.我国北斗卫星导航系统日趋完善,研发基于北斗系统的地面手持终端对于开发利用北斗导航卫星系统非常 ...

  8. android系统release签名

    转自:http://blog.csdn.net/yangkai6121/article/details/38682321 为什么需要给Android系统签个名才能进行CTS认证呢?原来我们通过make ...

  9. 生成release版本的Android系统

    1.使用platform密钥对apk进行签名 1.1.进入<Android_Source_Path>/build/target/product/security,找到[platform.p ...

最新文章

  1. #ifdef __cplusplus extern “C” { #endif的作用!
  2. [基础题] 3、设计一个交通工具抽象类,提供抽象方法--驾驶
  3. android 判断byte值_Android开发之UDP可靠性传输
  4. Linux_arm_启动_c语言部分详解,[原创]Linux arm 启动 c语言部分详解第四讲
  5. 读Getting Started With Windows PowerShell笔记
  6. 关于deepearth的一点小问题
  7. mysql按月归档日志表
  8. 解决方案:Gateway实现全局跨域
  9. Mac 解决 command not found: mysql
  10. python最适合做什么-python适合做什么开发_python未来发展怎么样
  11. for循环,while循环,break跳出循环,continue结束本次循环,exit退出整个脚本
  12. pandas 日期比较大小_计算pandas Dataframe中的日期时间差异
  13. 阿里云 POSTFIX 邮件服务 PHP
  14. mysql中哪一个储存逻辑型_《VisualFoxPro》2018秋华东年季学期在线作业(一)二三...
  15. 阿里java电话面试题
  16. 重发布,路由策略实验
  17. 《软件设计师》备考笔记
  18. 第13章-1~3 法兰接头预紧力密封接触分析(模型简化、网格调整、约束)并行计算设置、摩擦接触设置adjust to touch 、约束设置frictionless support、bolt
  19. 我用wxPython搭建GUI量化系统之wx.grid实现excel功能
  20. 向上取整⌈⌉ 和 向下取整⌊⌋ 和四舍五入

热门文章

  1. sparkSql 随机打散分配
  2. Vim常用技巧--查看不可见字符
  3. 张量基础2(张量乘法和对称)
  4. 关于H5的20道面试题及答案
  5. H.264 SVC 与H.264 AVC 有什么区别?
  6. Mac环境配置SSH Key
  7. JQuery之append和appendTo的区别,还有js中的appendChild用法
  8. 小波模极大值用于图像融合
  9. 微信公众平台Js API WeixinApi
  10. wav2letter++ 第一次training 日志