当前位置: 首页 > news >正文

Android Safety 系列专题【篇七:Android AVF机制】

如上邮件,google要求所有A15以上的设备都必须支持AVF,并且AOSP在A15的分区表中新增了pvmfw,并且在XTS中引入了对AVF的一些列兼容性测试。

因此本篇就是关于这一政策引起的几个问题进行解读。

一、AVF概念理解

1、什么是AVF?

AVFAndroid Virtualization Framework,Android虚拟化框架,Android 13引入的系统级框架,允许在Android设备上创建和运行隔离的虚拟机
Virtual Machine虚拟机,通过软件模拟的完整计算机系统,拥有独立的操作系统和资源
Hypervisor虚拟机管理器,负责创建、管理和调度虚拟机的软件层
Protected VM受保护虚拟机,内存被硬件隔离,宿主系统无法访问,用于安全敏感场景
MicrodroidAVF提供的轻量级Android虚拟机镜像,专为虚拟化场景优化

AVF全称Android Virtualization Framework,翻译过来就是Android虚拟化框架。那么google为什么要推行AVF呢?

  • 在引进AVF之前:

  • 在引进AVF之后:

AVF就是如上接受保护的Protected VM,因为AVF具有隔离环境的作用,因此当即使android是root的,至少VM也是安全的。

Protected VM依赖多层硬件机制实现隔离,相比传统式Non-protected VM有如下优势:

内存隔离软件隔离(Stage-2页表)硬件隔离 + 加密
Host可访问性⚠️ 可以访问✅ 无法访问
安全级别功能隔离级别安全隔离级别
性能开销较低较高
用途兼容性测试、功能隔离密钥管理、支付处理
硬件要求KVM即可需要TEE/内存加密支持

2、AVF技术架构

AVF技术还是非常复杂的,设计到上下底层,这里就提供一张AI画的图:

整个架构设计到如下模块:

  • 系统Feature声明

android.software.virtualization.framework

android.hardware.virtualization.vcpu

android.hardware.virtualization.protected_vm

  • HAL接口 (AIDL)
│ │ ┌─────────────────────────────────────────────────┐ │ │ │ │ │ hardware/interfaces/virtualization/ │ │ │ │ │ │ ├── IVirtualizationService.aidl │ │ │ │ │ │ ├── IVirtualMachine.aidl │ │ │ │ │ │ ├── IGlobalVmCallback.aidl │ │ │ │ │ │ └── types.aidl (Capability枚举) │ │ │ │ │ └─────────────────────────────────────────────────┘ │ │
  • 框架API
│ │ ┌─────────────────────────────────────────────────┐ │ │ │ │ │ android.os.VirtualizationManager │ │ │ │ │ │ • createVirtualMachine() │ │ │ │ │ │ • getVirtualMachine() │ │ │ │ │ │ • getSupportedCapabilities() │ │ │ │ │ │ │ │ │ │ │ │ android.system.virtualmachine.VirtualMachine │ │ │ │ │ │ • start() / stop() │ │ │ │ │ │ • connect() │ │ │ │ │ └─────────────────────────────────────────────────┘ │ │
  • Microdroid镜像
│ │ ┌─────────────────────────────────────────────────┐ │ │ │ │ │ /apex/com.android.virt/bin/microdroid │ │ │ │ │ │ ├── microdroid.img (系统镜像) │ │ │ │ │ │ ├── microdroid_kernel (内核镜像) │ │ │ │ │ │ └── microdroid_initrd.img (initrd) │ │ │ │ │ └─────────────────────────────────────────────────┘ │ │
  • 内核配置

CONFIG_KVM=y

CONFIG_KVM_ARM_HOST=y

CONFIG_VIRTUALIZATION=y

CONFIG_VHOST_VSOCK=y

  • 设备节点
│ │ ┌─────────────────────────────────────────────────┐ │ │ │ │ │ /dev/kvm (KVM方案) │ │ │ │ │ │ /dev/gunyah (Gunyah方案) │ │ │ │ │ │ /dev/vhost-vsock (VM通信) │ │ │ │ │ └─────────────────────────────────────────────────┘ │ │

3、AVF技术总结

  • 定义:Android Virtualization Framework , Android官方虚拟化框架,让Android能创建和管理隔离虚拟机的系统级解决方案。
  • 核心价值:硬件级安全隔离 → 即使Android被攻破,敏感数据仍安全 ; 独立执行环境 → 敏感操作在隔离VM中完成 ; 统一API → 开发者无需关心底层Hypervisor差异 。
  • 技术栈: 应用API → Framework → HAL → Kernel → Hypervisor → Hardware
  • 必要条件: CPU支持虚拟化扩展(ARMv8-A EL2); 内核启用KVM/Gunyah ;实现IVirtualizationService HAL ;系统Feature声明

二、XTS案例

1、MicrodroidTestApp.VTS

问题链接:https://jira.tinno.com/browse/PAAM-1344

失败日志:arm64-v8a MicrodroidTestApp.VTS com.android.microdroid.test.MicrodroidCapabilitiesTest#avfIsRequired fail
Device doesn't support AVF

用例分析:根据关键日志Device doesn't support AVF搜索如下代码

如上代码逻辑,如果ro.board.api_level小于202404,就不需要测试这一条,跳过下一步测试,此条PASS

如果大于202404,且没有配置FEATURE_VIRTUALIZATION_FRAMEWORK就直接报Device doesnt support AVF。因此此问题原因是我们没有配置如下feature:

在packages/modules/Virtualization/build/apex/product_packages.mk文件中有如下配置:

<permissions> <feature name="android.software.virtualization_framework" /> </permissions>

2、MicrodroidTestApp.CTS

问题链接:https://jira.tinno.com/browse/PAAM-1817

失败日志:arm64-v8a MicrodroidTestApp.CTS com.android.microdroid.test.MicrodroidCapabilitiesTest#supportForProtectedOrNonProtectedVms fail
A device that has FEATURE_VIRTUALIZATION_FRAMEWORK must support at least one of protected or non-protected VMs

测试用例:

根据报告日志可以看出来这里的getVirtualMachineManager().getCapabilities()获取出来的结果是0,表示都不支持

如上流程逻辑链表示当前基线根本就不支持AVF。因此最后此题需要提case到高通,因为这个芯片可能就不支持,我们是升级项目,因此最后向google申请豁免。

解决方案:最后意外之喜,正好遇上高通基线升级,升级patch有如下修改

  • 声明android.software.virtualization_framework特征能力

  • 配置hypervisor支持protected VM能力

3、Google pvmfw.img

报错日志:

解决方案:如上两个问题最后解决方式在测试之前"fastboot flash pvmfw pvmfw.img"替换pvmfw镜像,由此证明此项还和pvmfw分区有关系

http://www.jsqmd.com/news/624631/

相关文章:

  • fasdfsadfsda
  • 2025届必备的十大降重复率助手解析与推荐
  • Ozon卖家最头疼的8大问题,Captain AI一键解决
  • C#.NET log4net 实战:从基础配置到企业级日志架构
  • 从零开始:用Three.js CubeTexture和RGBELoader打造逼真3D场景(附免费HDR资源)
  • 一站式搞定Ozon运营!Captain AI 8大功能,告别繁琐,高效盈利
  • 别再只会点‘Fit’了!深度解析Origin高斯拟合背后的算法与结果解读
  • Mac文件预览终极指南:90+ QuickLook插件打造高效工作流
  • SpringBoot项目中高效集成VUE dist文件的实践指南
  • 基于Qwen3.5-9B-AWQ-4bit的MySQL智能运维:自动化SQL优化与故障诊断
  • 亲测五恒系统公司,实践分享挑好的
  • 风速预测(二)特征工程与模型输入构建
  • 2026教创始人IP打造的老师哪个好?3位标杆导师对比解析 - 真知灼见33
  • 别再傻傻分不清了!大疆OSDK和云API到底怎么选?一个表格帮你搞定
  • 告别BiocManager安装卡顿:用conda虚拟环境一键部署clusterProfiler生信分析环境
  • 帧差法实战:从原理到代码,轻松实现运动目标检测
  • **基于SystemVerilog的ASIC设计:从RTL建模到综合优化全流程实战**在现代半导体行业中,**ASI
  • 从API调用到语义原生:2026奇点大会定义的AI语音交互新范式(附可运行的RAG-Voice微框架模板)
  • 从零到一:在Windows上构建并部署你的ZLMediaKit流媒体服务
  • 【对象存储】MINIO_RELEASE.2024-08-17T01-24-54Z-cpuv1:从Docker部署到Rclone实战
  • ChatGLM-6B提示工程(Prompt Engineering)高级技巧
  • Trelby:5个理由告诉你为什么这是最值得尝试的免费剧本写作软件
  • 2026教短视频获客导师排行:谁更适配实体老板需求 - 真知灼见33
  • Mac上彻底告别Anaconda3:保姆级卸载与恢复系统Python指南(含软连接修复)
  • Kingfisher 实战指南:从 ENA、NCBI SRA 到云端的高效 RNA-seq 数据获取
  • 次元画室进阶:利用SolidWorks模型渲染图进行AI风格化再创作
  • 从PLC到LLM,智能制造范式迁移迫在眉睫,SITS2026透露的3个停产级预警信号
  • Java与JTS Topology Suite:高效空间计算的实战指南
  • 别再对着黑乎乎的标签图发愁了!手把手教你用Python给SAR水体分割标签添加彩色表(附完整代码)
  • Waydroid 技术深度解析:容器化 Android 在 Linux 环境中的创新实践