Android 虚拟化框架(AVF)指南
Android 虚拟化框架(AVF)指南
- 一、项目介绍
- 二、项目特色
- 三、如何使用AVF
- 四、总结
随着移动设备的普及和应用场景的多样化,安全性和隐私保护成为了移动操作系统的重要课题。Android作为全球最广泛使用的移动操作系统之一,一直在不断提升其安全性和功能性。Android虚拟化框架(AVF)作为一种新兴的技术,提供了一个安全且私密的执行环境,能够满足高安全性需求的应用场景。
文档:https://source.android.com/docs/core/virtualization?hl=zh-cn
一、项目介绍
Android虚拟化框架(AVF)是一个由Google开发的开源项目,旨在为Android设备提供一个安全的虚拟化环境。AVF利用虚拟化技术,将应用程序和系统服务隔离在独立的虚拟机中运行,从而提高系统的安全性和稳定性。AVF特别适用于需要高安全性和隐私保护的应用场景,例如金融应用、企业应用和敏感数据处理等。
AVF的核心组件包括基于内核的受保护虚拟机(pKVM)、Microdroid(一个精简版的Android操作系统)以及VirtualizationService(虚拟化服务)。这些组件共同构建了一个安全、灵活且高效的虚拟化环境。

二、项目特色
- 高安全性
AVF通过虚拟化技术提供了比传统Android应用沙盒更高的安全性。受保护的虚拟机(pVM)能够确保应用程序在一个隔离的环境中运行,即使主机系统遭到入侵,虚拟机中的数据和代码也能保持安全。
- 灵活性
AVF支持多种应用场景,开发者可以根据需求选择不同的虚拟化配置。通过Microdroid,开发者可以在虚拟机中运行精简版的Android操作系统,从而减少资源消耗并提高性能。
- 易于集成
AVF提供了丰富的API和工具,开发者可以轻松地将虚拟化功能集成到现有的应用程序中。VirtualizationService管理虚拟机的生命周期,并提供了便捷的接口用于创建和管理虚拟机。
- 社区支持
作为一个开源项目,AVF拥有活跃的社区支持。开发者可以获取帮助、分享经验,并参与项目的开发和改进。
三、如何使用AVF
与 AVF 兼容的应用包含两个部分:在主机 Android OS 上运行的应用部分,以及在 pVM 内的 Microdroid 上运行的应用部分。
-
在 Android 上运行的应用部分会实现界面、非机密业务逻辑,并创建和管理 pVM 的生命周期。
-
在 pVM 内的 Microdroid 上运行的应用部分负责执行任何需要安全执行的任务。
为了启动应用的 pVM 部分并与其通信,您的主机应用会创建一个 pVM,并在该 pVM 内运行原生共享库。此库实现 Binder 服务,应用的主机部分使用该服务与应用在 pVM 内的部分进行通信。

- 环境准备
首先,需要确保开发环境支持AVF。目前,AVF仅支持ARM64架构的设备。开发者需要安装最新版本的Android Studio,并确保设备运行支持AVF的Android版本。
- 配置虚拟机
开发者需要创建一个配置文件来定义虚拟机的操作系统和任务。以下是一个示例配置文件vm_config.json:
{"os": {"name": "microdroid"},"task": {"type": "microdroid_launcher","command": "MicrodroidTestNativeLib.so"}
}
- 实现Binder服务
在虚拟机中运行的应用部分需要实现一个Binder服务,用于与主机应用进行通信。以下是一个示例代码:
extern "C"
int android_native_main(int, char**) {// 实现Binder服务return 0;
}
- 创建和运行虚拟机
在主机应用中,开发者需要编写代码来创建和管理虚拟机。以下是一个示例代码:
// 准备配置文件
VirtualMachineConfig config = new VirtualMachineConfig.Builder(getApplication(), "assets/vm_config.json").build();// 创建或加载虚拟机
VirtualMachine vm = VirtualMachineManager.getInstance(getApplication()).getOrCreate("my_vm", config);// 运行虚拟机
vm.run();
- 与虚拟机通信
主机应用可以通过注册回调函数来与虚拟机中的Binder服务进行通信。以下是一个示例代码:
// 注册回调函数
vm.setCallback(Executors.newSingleThreadExecutor(),new VirtualMachineCallback() {@Overridepublic void onPayloadReady(VirtualMachine vm) {// 连接到Binder服务IBinder binder = vm.connectToVsockServer(PORT).get();IMyService svc = IMyService.Stub.asInterface(binder);// 使用自定义AIDL接口与服务通信Result res = svc.doSomething();}
}); // 异常处理和线程管理省略
vm.run();
四、总结
Android虚拟化框架(AVF)为开发者提供了一个安全、灵活且高效的虚拟化解决方案。通过AVF,开发者可以在Android设备上创建隔离的虚拟机环境,从而提高应用程序的安全性和隐私保护。AVF的高安全性、灵活性和易于集成的特点,使其成为需要高安全性应用场景的理想选择。通过本文的介绍和示例代码,希望能够帮助开发者更好地理解和使用AVF,开发出更加安全和稳定的应用程序。
相关文章:
Android 虚拟化框架(AVF)指南
Android 虚拟化框架(AVF)指南 一、项目介绍二、项目特色三、如何使用AVF四、总结 随着移动设备的普及和应用场景的多样化,安全性和隐私保护成为了移动操作系统的重要课题。Android作为全球最广泛使用的移动操作系统之一,一直在不断…...
day-77 超级饮料的最大强化能量
思路 动态规划:因为每一步要么选A,要么选B,所以问题可以转换为求最后一步从A选或从B选中的较大值 解题过程 定义而二维数组dp,dp[i][0]表示最后一步从A取能获得的最大能量,dp[i][1]表示最后一步从B取能获得的最大能量状态转换方程…...
有道小P 1.0.8 | 完全免费的AI全科学习助手,家长的好帮手
有道小P是一款由网易有道出品的完全免费的AI全科学习助手,专为中小学生设计。它支持多种输入方式,包括文字、语音和拍照识别,能够覆盖十个科目的所有题型,提供详细的解析和逐步解答,帮助孩子们理解和吸收知识。此外&am…...
vue项目中如何在路由变化时增加一个进度条
在 Vue.js 项目中,使用路由(如 Vue Router)时,为了提升用户体验,你可能会想要在路由变化时显示一个进度条。这可以通过多种方式实现,其中一种流行的做法是使用第三方库,如 vue-loading-bar 或 n…...
如何解决mingw64安装后配置完环境变量仍然执行不了gcc命令以及Vscode中的环境路径配置中找不到gcc
配置环境变量教程很多,就不多说,说下耗费一小时解决的问题:mingw64安装后配置完环境变量仍然执行不了gcc命令 配置 了N次了,都还是在终端找不到指令,然后,将路径放到第一个,然后再看下…...
3-petalinux2018.3 摸索记录 - 命令驱动 _ 交叉编译链
一、命令行控制GPIO 对于ps端设备,在板卡的linux系统中,切换到/sys/class/gpio路径下可以看到目前挂载的gpio设备。 export: 导入用户空间 gpiochip: 系统中gpio寄存器信息 unexport: 移除用户空间 以MIO40和MIO42…...
【二分查找】——模板
二分查找模板题 一、题目要求 给定一个长度为n的非递减数组和一个数字target,要求找到数组中第一个大于等于target的位置pos,数组下标从 0 开始。如果不存在大于等于target的数字,则输出 -1。 二、输入格式 第一行:为两个正整…...
从可逆计算看DSL的设计要点
低代码平台的可视化设计器本质上是DSL(Domain Specific Language)的结构化编辑器。可视化设计器将编辑的结果序列化成文本格式时所采用的规范就是一种DSL语法定义。 Nop平台基于可逆计算原理,提出了一整套系统化的构建机制来简化DSL的设计和…...
axios竟态问题
竟态问题 在我们日常开发经常遇到一些竟态问题 例子1 现象1 表格分页,如果设置请求loading, 先切换到分页第99页,迅速在又切换到第1页,最后列表显示的是第99页数据。 原因 由于第99页请求数据花费时间可能500ms,第1页数据只需要100ms,第1页…...
如何批量注册多个Outlook邮箱账号并避免关联
批量注册多个Outlook邮箱账号时,如何避免账号之间的关联性是一个重要的考量因素。会在此文一起探讨如何高效且安全地批量注册多个Outlook邮箱账号,并提供一些实用的建议来确保这些账号不会被关联。 一、Outlook邮箱批量注册机制 在深入注册流程之前&…...
如何在安卓設備上設置全局代理?
對於安卓用戶來說,設置全局代理是維護網路隱私一種有效的方法,可以幫助在所有應用中使用同一個代理伺服器。本文將詳細介紹如何在安卓設備上進行全局代理設置。全局代理指的是通過一個代理伺服器來轉發設備上所有應用程式的網路請求。這樣,所…...
操作系统实验记录
实验零:虚拟机安装 一、安装vmware虚拟机 与vmware匹配搜索结果 - 考拉软件 (rjctx.com),下载17.5.1版本即可下载后对照教程安装 二、下载iso虚拟驱动 搜索清华大学镜像网站,点击再搜ubuntu,下载这个4.1GB的iso文件安装后打开vmware虚拟机 三、配置vmware虚拟机 右键管…...
FastAPI 路径参数详解:动态路径与数据校验的灵活实现
FastAPI 路径参数详解:动态路径与数据校验的灵活实现 本文全面介绍了在 FastAPI 中使用路径参数的技巧和实现方式。路径参数允许 API 动态响应不同路径中的请求信息,结合 URL(Uniform Resource Locator)和 URI(Unifor…...
【STM32】SD卡
(一)常用卡的认识 在学习这个内容之前,作为生活小白的我对于SD卡、TF卡、SIM卡毫无了解,晕头转向。 SD卡:Secure Digital Card的英文缩写,直译就是“安全数字卡”。一般用于大一些的电子设备比如:电脑、数码相机、AV…...
我一口气记录下整个接口自动化测试过程!
一、为什么选用postman postman调试工具无论对于开发和测试小白,还是技术大牛来说应该都耳熟能详,在过去的几年里大家对这款工具应用最广的用途是把当作接口调试的测试工具,它能发送几乎所有类型的HTTP请求,操作界面非常简洁美观…...
【VS中Git同步提交 报错:访问.vs/FileContentIndex/xxx.vsidx权限不允许】
参考: Git commit vsidx file access denied in Visual Studio 一劳永逸的方法: 在VSCode里,Git->设置->选项:编辑.gitignore文件,如下图: 忽略整个.vs文件夹,再重新提交就不会有涉及…...
Linux下Nginx的安装与使用
Linux下Nginx的安装与使用 博客: www.lstar.icu 开源地址 Gitee 地址: https://gitee.com/lxwise/iris-blog_parent Github 地址: https://github.com/lxwise/iris-blog_parent 序言 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子…...
飞机布雷盖航程公式
飞机布雷盖航程公式 1. 喷气式飞机布雷盖航程公式推导2. 螺旋桨飞机布雷盖航程公式推导3. 喷气式飞机与螺旋桨飞机的差异分析3.1 喷气式飞机的推力产生机制3.2 螺旋桨推进推力产生机制 布雷盖航程公式(Breguet Range Equation)是描述飞行器巡航飞行阶段航…...
在K8s平台部署个人博客
在K8s平台部署个人博客 实验步骤查看wordpress前端的service浏览器访问http://node_ip:30090 实验步骤 kubectl create secret generic mysql-pass --from-literalpasswordYOUR_PASSWORD把mysql.tar.gz和wordpress.tar.gz上传到K8s工作节点,手动解压即可࿱…...
git入门教程10:git性能优化
一、配置优化 使用SSH协议: 相比HTTP/HTTPS协议,SSH协议在网络传输中更高效,且支持更安全的认证方式。确保你的远程仓库URL使用的是SSH协议,例如:git clone gitgithub.com:username/repo.git。 调整Git缓冲区大小&…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
