Android 模拟器:Project Marble 中的改进

Android模拟器性能优化:Project Marble关键技术解析 Android模拟器作为移动开发的核心工具,其性能直接影响开发效率。通过QEMU虚拟化技术实现的系统级模拟,在保证硬件行为准确性的同时,面临着资源占用高的挑战。Project Marble创新性地采用电池模式优化、精确暂停机制和图形管线改进,使CPU占用降低40%以上,内存消耗减少25%。这些架构级优化既保留了完整的测试能力,又显著提升了开发体验,特别适用于持续集成环境和游戏开发等高性能需求场景。关键技术如ADB命令控制、kqueue事件机制等改进,为跨平台开发工具链优化提供了实践范例。 阅读详情

这是 Android Studio 团队一系列博客文章中第三篇,深入探讨了 Project Marble 中的细节和幕后情况。本文是由模拟器团队的 Sam Lin(产品经理),Lingfeng Yang(技术主管)和 Bo Hu(技术主管)撰写的。

今天我们很高兴地向您介绍我们在 Project Marble 期间在 Android 模拟器上取得的最新进展。我们的核心目标之一是使 Android 模拟器成为应用程序开发的必选设备。物理 Android 设备非常棒,但我们的目标是增加功能和性能,使您在开发和测试 Android 应用程序时更加高效。

我们听说很多应用程序开发者喜欢我们最近对模拟器所做的改进,从 2 秒的启动时间,GPU 图形加速,再到屏幕快照。然而,我们也听说 Android 模拟器消耗了您开发电脑上的太多系统资源。为了解决这个问题,我们在 Project Marble 中创建了一个任务来优化 Android 模拟器的 CPU 使用率。在过去几个月的 Project Marble 中,在不违背原本设计原则的情况下,Android 模拟器的能效和绘制速度有了显著提升。在本文中,我们将介绍到目前为止在 Canary Channel 上 Android Emulator 28.1 发布的一些进展。

在减少开销的同时保持原本设计原则

Android 模拟器的最大好处在于为开发者提供了一种可扩展的方法,通过各种设备配置和屏幕分辨率来测试最新 Android API,而无需为每个配置购买物理设备。因此,在 Android 模拟器上测试应用程序应该尽可能贴近在物理设备上的测试,并同时保持虚拟设备的优势。

为了支持最新的系统映像,我们特意设计一个尽可能接近物理设备的 Android 模拟器,而不只是一个仿真器,这种方法可以确保 API 的正确性以及 Android 系统行为和交互的高保真度。当一个新的 Android 版本推出时,我们只需要确保我们的硬件抽象层(HALs)和内核与模拟器和新的系统映像兼容,而不需要从头开始为新的 Android 版本重新实现 Android API 中的所有更改。这种体系结构最终大大地加快了模拟器采用新的系统映像的速度。

然而,这种完整的系统模拟方法在 CPU 周期和内存访问上的开销都会增加。相比之下,基于模拟器的方法在主机系统上包装类似的 API,开销可能会更低。因此,我们的挑战在于,在降低 CPU 和内存开销的同时,保持完整系统模拟的准确性和维护优势。

对 Android 模拟器架构的研究

Android 模拟器在称为 Android 虚拟设备(AVD)的虚拟机上运行 Android 操作系统。AVD 包含了完整的 Android 软件栈,运行时就像在物理设备上一样。总体架构图如下。

**Android Emulator System Architecture**

由于整个 Android 操作系统的运行和主机的操作系统完全分离,因此运行 Android 模拟器可能会导致主机机器上的后台活动,即便没有任何输入。在进行了一些技术调查之后发现,当 AVD 空闲时,如下一些任务是 CPU 周期的主要消耗者:

  • Google Play Store —— 当有新版本时,应用程序会自动更新。
  • 后台服务 —— 当它认为设备在充电时,一些响应式的服务会使 CPU 使用率保持在较高水平。
  • 动画 —— 例如实况壁纸

对于这些领域我们进行了更深入的技术研究并找到了以下 5 个解决方案来优化 Android 模拟器。

  1. 默认电池模式
  2. 模拟器的暂停/恢复
  3. 减少绘制调用的开销
  4. 减少 macOS 上主循环的 IO 开销
  5. Headless 构建

改进 #1 —— 默认电池模式

之前,Android 模拟器把 AVD 的电池模式设置为充电模式。经过深思熟虑的讨论和数据分析,我们得出结论,最好将 AVD 默认设置为电池模式。因为大多数 Android framework,服务和应用程序都经过了优化以节省电池寿命,这些优化都只在设备(物理设备或虚拟设备)认为它在使用电池而不是充电时才开始。

然而,仅仅默认 AVD 使用电池还不够。因为处于电池模式会导致屏幕在一段时间之后自动关闭。这对于在笔记本电脑或者台式机上使用 Android 模拟器的用户来说会有一点困惑,因为他们期望应用程序不会随机进入睡眠状态,需要被唤醒。为了防止这种情况,Android 模拟器将在每次冷启动完成时用 ADB shell 命令将屏幕关闭的时间设置为最大值(~24 天)。

有了这些改变,Google Play Store 不会在电池模式再自动更新应用程序,避免了系统开销。然而,在切回充电模式之后,[应用程序的自动升级] (support.google.com/googleplay/…) 仍然可以被触发。这实际上让开发者可以控制何时自动更新应用程序。这可以防止对关键用例的干扰,比如当用户只想构建和测试单个应用程序的时候。下表比较了电池模式和充电模式下的 CPU 使用状况:

**AVD CPU Usage: Auto-update app vs Idle**

改进 #2 —— 模拟器暂停/恢复

在很多情况下,你可能需要立即保证模拟器不会在关键任务期间(比如编辑/生成/部署)在后台占用 CPU 周期。为了解决这个问题,我们正在研究一个控制台命令和接口,用于完全暂停模拟器 CPU 的使用。这可以通过以下控制台命令显示暂停/恢复 AVD 来完成。

**Android Emulator: Pause command line options**

这里的挑战是如何协调 Android Studio 和 Android 模拟器状态的改变。所以当在部署应用程序时,我们会自动恢复模拟器。我们还在研究这个机制,很高兴听到您的想法和反馈。

改进 #3 —— 减少绘制调用的开销

我们还对 Android 模拟器的引擎进行了修改,使其更高效的绘图,从而在测试屏幕上有很多对象的图形密集型应用程序时获得更流畅的用户体验。比如,模拟器 v28.1.10 在GPU 模拟压力测试应用程序上的绘制速度比 v28.0.23 提升了 8%。我们还在 Android Q 上进行进一步的优化,并将在 Android Q preview 期间共享其他更新。

**Emulator OpenGL ES FPS: 28.0.23 vs 28.1.10**

改进 #4 —— 减少 macOS 上主循环的 IO 开销

完整的系统模拟器必须维护一些方法,以通知虚拟操作系统磁盘和网络上的 I/O 已经完成。Android 模拟器基于 QEMU,使用主循环和 IO 线程来做到这一点。这在 Linux 和 Windows 上的开销都比较低。然而在 macOS 上我们看到,由于使用了 select() 系统调用,主循环的 CPU 使用率更高。这通常没有高效的实现方式。macOS 提供了一个低开销的方式来等待 I/O:kqueue。我们发现当前基于 select() 主 I/O 循环,可以替换为基于 kqueue 的主 I/O 循环。这大幅降低了主循环中的 CPU 使用率,从 10% 降低到 3%。由于这并不能说明所有空闲 CPU 使用率的情况,下面的图表没有显示太多的变化。然而,这种差异仍然是可以观察到的。

AVD Idle CPU Usage — Emulator 28.0.23 vs 28.1.10

改进 #5 —— Headless 构建

对于那些在 Android 应用程序构建中使用持续集成系统的用户,我们也在这方面进行了性能改进。通过关闭 Android 模拟器的用户界面,您可以使用新的模拟器 Headless 模式。这种新的模式在后台运行测试,并使用更少的内存。它大概还需要 100MB,主要是因为我们在用户界面使用的 Qt 库没有加载。当不需要用户界面和交互时,这也是运行自动化测试的一个好选择。增量可以类似如下那样启动两个模拟器 AVD 实例来测量。注意,命令行示范显式地指定主机的 GPU 模式,以确保在相同的条件下进行比较。

**Android Emulator: Headless emulator command line option**

**AVD Idle Memory Usage — emulator vs emulator-headless**

接下来

要使用本文中介绍的性能和资源优化,请在 Canary Channel 下载 Android Emulator 28.1。我们很高兴能与您分享这次提前的进展,但我们肯定还没有完成。我们今天邀请您尝试 Android Emulator 的最新更新,并向我们发送您的反馈。

如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。

最后

按照国际惯例,给大家分享一套十分好用的Android进阶资料:《全网最全Android开发笔记》。

整个笔记一共8大模块、729个知识点,3382页,66万字,可以说覆盖了当下Android开发最前沿的技术点,和阿里、腾讯、字节等等大厂面试看重的技术。

图片

图片

因为所包含的内容足够多,所以,这份笔记不仅仅可以用来当学习资料,还可以当工具书用。

如果你需要了解某个知识点,不管是Shift+F 搜索,还是按目录进行检索,都能用最快的速度找到你要的内容。

相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照整个知识体系编排的。

(一)架构师必备Java基础

1、深入理解Java泛型

2、注解深入浅出

3、并发编程

4、数据传输与序列化

5、Java虚拟机原理

6、高效IO

……

图片

(二)设计思想解读开源框架

1、热修复设计

2、插件化框架设计

3、组件化框架设计

4、图片加载框架

5、网络访问框架设计

6、RXJava响应式编程框架设计

……

图片

(三)360°全方位性能优化

1、设计思想与代码质量优化

2、程序性能优化

  • 启动速度与执行效率优化
  • 布局检测与优化
  • 内存优化
  • 耗电优化
  • 网络传输与数据储存优化
  • APK大小优化

3、开发效率优化

  • 分布式版本控制系统Git
  • 自动化构建系统Gradle

……

图片

(四)Android框架体系架构

1、高级UI晋升

2、Android内核组件

3、大型项目必备IPC

4、数据持久与序列化

5、Framework内核解析

……

图片

(五)NDK模块开发

1、NDK开发之C/C++入门

2、JNI模块开发

3、Linux编程

4、底层图片处理

5、音视频开发

6、机器学习

……

图片

(六)Flutter学习进阶

1、Flutter跨平台开发概述

2、Windows中Flutter开发环境搭建

3、编写你的第一个Flutter APP

4、Flutter Dart语言系统入门

……

图片

(七)微信小程序开发

1、小程序概述及入门

2、小程序UI开发

3、API操作

4、购物商场项目实战

……

图片

(八)kotlin从入门到精通

1、准备开始

2、基础

3、类和对象

4、函数和lambda表达式

5、其他

……

图片

好啦,这份资料就给大家介绍到这了,有需要详细文档的小伙伴,可以微信扫下方二维码领取哈~

img

Android模拟器性能优化:Project Marble核心技术解析 Android模拟器作为移动开发的核心工具,其性能直接影响开发效率。通过硬件抽象层(HAL)和系统级模拟技术,模拟器能准确复现真实设备行为,但也带来较高资源消耗。Project Marble计划针对性地优化了进程冻结、图形渲染等关键技术,使CPU占用降低40%,帧率提升20%。这些改进特别适用于持续集成和大规模测试场景,结合智能电池模式等创新,显著提升了开发体验。开发者可通过adb命令验证优化效果,合理配置GPU模式和动画服务,进一步释放性能潜力。 阅读详情

相关推荐

Android模拟器性能优化实战:Project Marble深度解析

虚拟化技术通过硬件加速和资源调度优化,显著提升计算设备运行效率。在Android开发领域,QEMU虚拟化引擎结合KSM内存合并技术,实现了模拟器冷启动时间缩短82%、内存占用降低40%的突破。Project Marble创新性地引入GPU直通和ANGLE图形转译,使OpenGL ES渲染性能提升276%,特别适用于金融APP等高强度测试场景。通过配置-host参数和ZRAM交换分区,开发者可快速构建高性能CI/CD测试环境,将单元测试时间从32分钟压缩至9分钟。

weixin_29188043的博客 260

modprobe加载异步加载

分析 1.如果add x9,x9,x10--->x9=0x0000003dd2519e20+0xffffffc0ed9c3000=0xfffffffebfedce80--->地址是map的。 如果add x9,x9,x10--->x9=0x00+0xffffffc0ed9c3000=0xffffffc0ed9c3000+0x60([0x60]u64nfct_slow_path)---->ffffffc0ed9c3060notm

stability 845

Android 模拟器 Project Marble:改进让它更出色

Android 模拟器 Project Marble 是针对 Android 开发人员的一项改进计划,旨在提高模拟器的性能和稳定性。Android 模拟器 Project Marble 是针对开发人员的一项改进计划,旨在提高模拟器的性能和稳定性。通过优化输入事件处理、提供更好的错误处理和反馈机制,以及改进模拟器的图形渲染性能,我们可以提升用户在 Android 模拟器中的体验。通过释放不必要的对象引用、使用弱引用或软引用来管理内存,以及实现缓存机制,我们可以有效地减少内存占用,并提高模拟器的稳定性和性能。

PixelDyno的博客 154

Android系统的ko模块加载

1、在Android源码的Android/device路径下可以找到相关项目的文件夹,包括intel、moto、huawei、lge等。 选择自己选择的项目的处理器芯片的文件目录(forexample : intel),再在下面选择项目: Android/device/intel/ spectralite Android/device/intel/ spectralite-kernel

abcdefg的专栏 5751

快速上手springboot+vue的前后端分离项目

使用webStorm新建项目后,把 .lock文件删除后项目运行才不报错,配置文件 vue.config.js 中加入 lintOnSave: false 关闭eslint语法检测。在多层嵌套的父子组件之间传递状态已经十分麻烦,而Vue更是没有为兄弟组件提供直接共享数据的办法。基于这个问题,许多框架提供了解决方案——使用全局的状态管理器,将所有分散的共享数据交由状态管理器保管,Vue也不例外。其中一种解决CORS 的方法, 在springboot项目中跨域的方法或类加上@CrossOrigin注解。

m0_61950264的博客 1908

【通信原理 入坑之路】—— 详解IQ调制以及星座图原理

文章目录一. IQ调制与解调的原理与过程二.PSK(相移键控)和IQ调制的关系:2.1 用IQ调制实现QPSK调制 一. IQ调制与解调的原理与过程 IQ调制的定义是:“IQ调制就是数据分为两路,分别进行载波调制,两路载波相互正交。I是in-phase(同相), q是 quadrature(正交)” 我们通过下面的示意图介绍IQ调制的过程: 首先,信号分成两路:I路和Q路(为了方便理解我们把这两...

凝望,划过星空的博客 11万+

Android 8.0学习(5)---模块化内核

模块化内核要求在 Android 8.0 中,设备内核分为系统芯片 (SoC)、设备和板专属组件。基于这种分层结构的内核和 Android 使得原始设计制造商 (ODM) 和原始设备制造商 (OEM) 可以在独立的板专属树中使用板专属功能、驱动程序等,使他们可以替换通用的内核配置、以内核模块的形式添加新的驱动程序等。本页详细介绍了以下方面的要求:对于独立的 SoC 和 OEM/ODM 内核开发的平...

zhangbijun1230的专栏 5345

lumerical-环形谐振器

利用mode求解器优化得到所需的环的总长度,即环形器的半径,然后通过varFDTD得到光场分布和透过率.

m0_61776728的博客 2189

如何在根文件系统中使用modprobe

这 几天在做4020的快速启动,本来想将网络模块化这样,能够将内核大概缩小0.5M(这个还是zImage),这样无论在uboot阶段搬运,还是在 zImage段的解压缩,还是在最后的启动都可以大大减少linux的启动时间,然而这中间有个很重要的问题是怎样在nfs中实现modprobe的命 令,我在原来的busybox1.10.4中敲入modprobe命令出现如下错误:  /quick_sta

Android/Linux的专栏 4191

从零搭建ROS1导航小车(一):松灵SCOUT Mini底盘通讯配置与ROS包编译避坑指南

本文详细介绍了从零开始搭建ROS1导航小车的初始步骤,重点讲解松灵SCOUT Mini底盘的通讯配置与ROS包编译避坑指南。内容包括硬件连接、CAN通讯配置、ROS工作空间构建及编译优化等实用技巧,帮助开发者快速实现自主导航小车的通讯功能。

weixin_27014595的博客 189

Odoo 入门 | 什么是 Odoo?

Odoo是一套全球开源的ERP/CRM系统,最初的名字为TinyERP,08年5月之后称之为OpenERP,之后又改为Odoo。

洛阳泰山的博客 6209

如何在android设备上insmod自己单独编译的.ko,解决签名问题

近期由于项目需要,需要自己写一个.ko文件,来操作寄存器,但是该.ko是不能跟整体工程在一起的,需要单独编译,这过成功遇到了大量的问题,现在终于解决,跟大家分享一下,很珍贵!!! 遇到的问题: 1. 在android设备中输入insmode hello.ko ,会提示"nsmod: error inserting 'hello.ko': -1 Required key not availa

Armsterlong的专栏 1万+

量子化学仿真软件:VASP_(7).表面与界面性质模拟

在量子化学仿真软件领域,表面与界面性质的模拟是研究多相催化、表面反应、材料科学等领域的关键工具。VASP(Vienna Ab Initio Simulation Package)作为一种广泛使用的密度泛函理论(DFT)计算软件,提供了强大的功能来模拟表面与界面的性质。本节将详细介绍如何使用VASP进行表面与界面性质的模拟,包括模型构建、输入文件准备、计算设置、结果分析等步骤。

kkchenjj的博客 951

2024年安卓最新[译] Android 模拟器:Project Marble 中的改进(1),2024年最新数据结构与算法面试题 JAVA

Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!上面分享的字节跳动公司2021年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。【Android高级架构视频学习资源】Android部分精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!

2401_84545618的博客 1530

TC8:IPv4_HEADER_01-04

IPv4_HEADER_01: Ensure that the DUT generates an IPv4 Packet with a Total Length greater than or equal to 20 目的 确保DUT生成的IPv4报文的IP头部中的Total Length字段值大于等于20 IPv4协议头部中的Total Length字段表示整个IP数据包的长度,包括IP Header和payload之和,IP首部的长度最少就有20个字节,所以Total Length值肯定大于等于20

jasonj333 3967

《派出你的AI同事:WorkBuddy案例实战》055:客服工单自动分类与话术生成

客服工单自动分类与话术生成 —— 《派出你的AI同事:WorkBuddy案例实战》系列文章,配图已统一为规范示意图。

LuckyHanMo的博客 285

2024年最全[译] Android 模拟器:Project Marble 中的改进,android架构师面试题

希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。

2301_82243523的博客 837

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

大理石在哪儿_android模拟器项目大理石改进

大理石在哪儿Posted by: Sam Lin, Product Manager, Android 作者:Android产品经理Sam Lin This is the third in a series of blog posts by the Android Studio team diving into some of the details and behind the scenes o...

weixin_26727575的博客 231

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

visual studio 最新稳定版本_Android Studio 3.6稳定版发布

Android Studio 3.6稳定版已发布,此版本也是“Project Marble”结束后发布的首个版本,“Project Marble”是 Android Studio 团队去年为提升产品质量而进行的一项计划,在此期间,团队暂缓了新特性的开发工作,专心提升产品质量。该计划着力改进 Android Studio 的三个主要方面:系统运行状况、功能完善以及错误修复,力图在 And...

weixin_39545269的博客 255

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android Studio 3.5: 稳步推进 Project Marble 计划

作者: Jamal Eason, Android 产品经理您是否曾希望 Android Studio 可以速度更快、性能更优、效率更高?如是的话,请立即下载最新的 And...

谷歌开发者 717

Android Studio 3.3发布:官方支持导航编辑器

谷歌发布Android Studio 3.3。这一版本主要关注错误修复和稳定性改进,不过也带来了导航编辑器的官方支持、Kotlin和IntelliJ平台的更新,等等。Android Studio 3.3修复了200多个错误。谷歌组建了一个叫作Project Marble的团队,专注于巩固基本的IDE功能和完善面向用户的功能,减少崩溃次数、内存泄漏和影响用户体验的错误。核心Android Studi...

cpongo5 4671

[译] Android Studio Project Marble_ Apply Changes

Android Studio 团队有一系列深入探讨 Project Marble 细节和幕后情况的文章,本文是其中的第一篇。从发布 Android Studio 3.3 开始,Project Marble 就致力于保证 IDE 基本功能的稳定性和流畅度。这篇文章是由 Apply Changes 团队的 Jon Tsao(产品经理),Esteban de la Canal(技术负责人),Fabien Sanglard(工程师)和 Alan Leung(工程师)共同完成。 Android Studio 的一个.

mehmetkollayan的博客 328
上一篇: [贝聊科技] WebView截长图解决方案
下一篇: 【- Flutter Web篇 -】 FlutterUnit web版闪亮登场
CV大师啊
博客等级 码龄5年 5984粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值