安卓VirtualDisplay虚拟屏幕如何实现没有内容显示mirror内容(aosp14版本)
背景:
上一篇blog已经对mirror模式显示镜像屏幕内容进行了详细讲解:
安卓VirtualDisplay虚拟屏幕如何实现没有内容显示mirror屏幕内容
不过这个分析版本是基于aosp13,在这个发布后,有学员在aosp14上进行验证,发现还是有较大的差异相比文章。我这边也亲自试了一下,发现原理其实相差不大,本质都还是一样的对layerStack进行过滤匹配,不过相比aosp13来说只是变化layerStack对象变变化了。
剖析aosp14相关原理
1 先看看镜像模式:

这个时候进行dumpsys SurfaceFlinger
主要看以下两个部分
1、看看虚拟display对象的layerStack

可以看到,这个aosp14版本上这里Virtual Display的layerStack在镜像模式就是2,而aosp13版本时候在镜像模式layerStack是0。这里就是很多同学想问的差异点,不理解这里mirror模式就是2,那还怎么让镜像屏幕内容显示在Virtual Display上。
这里就是上面我提到的变化的是layerStack的对象,原来aosp13上面变化是Display的layerStack值,但是在aosp14上面变化的是Layer对应的layerStack
看看Layer的变化:

这里面主屏幕的Layer都会在虚拟屏幕有一个对应的Mirror Layer即直接对主屏幕的每一个layer进行了Mirror,再看看这些Mirror Layer的layerStack都是2,这样就可以和Virtual Display的layerStack进行完全的匹配。

到这里大家应该清楚了aosp14相比aosp13来说本质就是layerStack的对象变换了一下,原来aosp13变换一直是Display为对象,aosp14上面变化的对象是Layer,这样就实现了没有内容时候可以显示另一个屏幕的内容。
2 在看看非镜像模式,自己屏幕有内容情况
虚拟屏幕展示是时钟app,和主屏幕展示不一样

同样要通过dumpsys SurfaceFlinger来分析调研
先看Virtual Display的layerStack情况:
看到一样是2
再看看显示图层Layer情况:

可以看到上面的DeskClock的图层已经没有了Mirror字样,因为他本身就是只属于Virtual Display的图层
到此也就清楚aosp14和aosp13这一部分的差异,其实本质上就是对layerStack的对象主体从Display到layer这样过程而已。
ps:注意如果在dumpsys SurfaceFlinger时候发现了没办法显示虚拟屏幕layer时候需要去surfaceflinger中修改以下代码放开dump

本文章更多详细代码和资料需要购买课程获取
hal+perfetto+surfaceflinger
https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg

私聊作者+v(androidframework007)
其他课程七件套专题:
点击这里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw
视频试看:
https://www.bilibili.com/video/BV1wc41117L4/
相关文章:
安卓VirtualDisplay虚拟屏幕如何实现没有内容显示mirror内容(aosp14版本)
背景: 上一篇blog已经对mirror模式显示镜像屏幕内容进行了详细讲解: 安卓VirtualDisplay虚拟屏幕如何实现没有内容显示mirror屏幕内容 不过这个分析版本是基于aosp13,在这个发布后,有学员在aosp14上进行验证,发现还…...
YOLOv10在RK3588上的测试(进行中...)
1.代码源 国内镜像站在gitcode。这个镜像站也基本上包含了github上常用项目的镜像。然后它的主发布源在这里: GitCode - 全球开发者的开源社区,开源代码托管平台 yolov10是清华主导做的... 然后,在维护列表里看到了这个: 2024年05月31日&am…...
git的ssh安装,windows通过rsa生成密钥认证问题解决
1 windows下载 官网下载可能出现下载太慢的情况,Git官网下载地址为:官网,推荐官网下载,如无法下载,可移步至CSDN,csdn下载地址:https://download.csdn.net/download/m0_46309087/12428308 2 Gi…...
果园预售系统的设计
管理员账户功能包括:系统首页,个人中心,管理员管理,用户管理,果树管理,果园管理,果园预约管理 前台账户功能包括:系统首页,个人中心,论坛,公告&a…...
学了这篇面试经,轻松收割网络安全的offer
网络安全面试库 吉祥学安全知识星球🔗除了包含技术干货:Java代码审计、web安全、应急响应等,还包含了安全中常见的售前护网案例、售前方案、ppt等,同时也有面向学生的网络安全面试、护网面试等。 0x1 应届生面试指南 网络安全面…...
双向转发检测BFD(学习笔记)
定义 双向转发检测BFD(Bidirectional Forwarding Detection)是一种全网统一的检测机制,用于快速检测、监控网络中链路或者IP路由的转发连通状况 BFD检测机制 BFD的检测机制是两个系统建立BFD会话,并沿它们之间的路径周期性发送B…...
Spring Boot:Java 应用开发高效之道
Spring Boot 是一种革命性的框架,旨在简化 Java 应用的创建和部署过程。通过自动化配置和简化项目搭建流程,Spring Boot 大大加速了开发周期,让 Java 应用开发变得更加高效和便捷。 核心优势: 快速启动和简化配置:Spr…...
WebSocket 入门教程
什么是 WebSocket? WebSocket 是一种通信协议,它在单个 TCP 连接上提供全双工通信。与传统的 HTTP 不同,WebSocket 允许服务器主动向客户端推送数据,而不仅仅是客户端请求数据。这使得 WebSocket 非常适用于需要低延迟和实时通信…...
C++中extern “C“的用法
目的 extern "C"是经常用到的东西,面试题目也经常出现,然则,实际用时,还是经常遗忘,因此,深入的了解一下,以增强记忆。 extern "C"指令非常有用,因为C和C的近亲…...
常见机器学习的原理及优略势
有监督 一、线性回归(Linear Regression) 1. 算法原理 线性回归(Linear Regression)是一种基本的回归算法,它通过拟合一个线性模型来预测连续型目标变量。线性回归模型的基本形式是:y w1 * x1 w2 * x2 … wn * …...
李诞-2021.8脱口秀工作手册-1-工作的本质是交易;脱口秀是一份和生活分不开的工作,你的全部人生都理应要为你的创作提供养分,为它服务。
1 首先,这是一份工作,工作的本质是交易。 我们在用自己的时间和才能,通过一家公司,与市场交换金钱。 根据诺贝尔经济学奖得主科斯的著名理论,公司会产生的原因,就是人们自己直接与市场交易成本太高&…...
生命在于学习——Python人工智能原理(3.3)
三、深度学习 4、激活函数 激活函数的主要作用是对神经元获得的输入进行非线性变换,以此反映神经元的非线性特性。常见的激活函数有线性激活函数、符号激活函数、Sigmod激活函数、双曲正切激活函数、高斯激活函数、ReLU激活函数。 (1)线性…...
【C++11】智能指针问题
文章目录 RAII一、auto_ptr二、unique_ptr三、shared_ptrshared_ptr的循环引用问题 四、weak_ptr总结 RAII RAII就是将资源交给一个对象管理,这个对象能进行正常的管理和释放资源。 一、auto_ptr auto_ptr的问题是:在拷贝构造和赋值重载时,…...
借助ChatGPT撰写学术论文,如何设定有效的角色提示词指
大家好,感谢关注。这个给大家提供关于论文写作方面专业的讲解,以及借助ChatGPT等AI工具如何有效辅助的攻略技巧。有兴趣的朋友可以添加我(yida985)交流学术写作或ChatGPT等AI领域相关问题,多多交流,相互成就…...
成功在服务器liunx-ubantu上安装pytorch
sudo pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118参考链接: 教程(部分参考) Pytorch官网...
【面试干货】抽象类和接口的区别
【面试干货】抽象类和接口的区别 1、抽象类1.1、什么是抽象类?1.2、示例代码 2、接口2.1、什么是接口?2.2、示例代码 3、比较和总结3.1、使用场景3.2、关键区别3.3、代码示例比较 💖The Begin💖点点关注,收藏不迷路&am…...
python爬虫:实现动态网页的爬取,以爬取视频为例
引言: 爬虫也被称为网络蜘蛛(Spider),是一种自动化的软件程序,能够在互联网上漫游,按照一定的规则和算法抓取数据。 爬虫技术广泛应用于搜索引擎、 数据挖掘 、信息提取等领域,是互联网技术的重要组成部分。 摘要: 作为爬虫的初学者,网页越简单越好,因为网页的结构…...
Incredibuild for Mac 来了!
Mac 开发者在寻找适合自己需求的工具时可能会遇到一些困难,因为 Mac 操作系统相对封闭,不像其他系统那样开放和灵活。尽管如此,Mac 开发者在开发应用程序时的需求(比如功能、效率等)和使用其他操作系统的开发者是类似的…...
递归解析 LXML 树并避免重复进入某个节点
1、问题背景 我们在使用 LXML 库解析 MathML 表达式时,可能会遇到这样一个问题:在递归解析过程中,我们可能会重复进入同一个节点,导致解析结果不正确。例如,我们希望将以下 MathML 表达式解析为 Python 表达式&#x…...
GaussDB技术解读——GaussDB架构介绍(三)
目录 9 智能关键技术方案 智能关键技术一:自治运维系统 智能关键技术二:库内AI引擎 智能关键技术三:智能优化器 10 驱动接口关键技术方案 GaussDB架构介绍(二)从数据持久化存取层(DataNode)关键技术方案、全局事…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
