Android Graphics 显示系统 - Android 14(U)编译/运行Surface绘图、多屏同显/异显示例

1 前言

近来,有粉丝朋友反馈早前提供的演示demo在Android 14平台上编译有问题,想询问该怎么修改适配。最近一直很忙也就没顾得上处理这些问题,这几天得空就来移植一下吧。

早前我们的demo和讲解都是基于Android 12展开的,本质大同小异。

Surface绘图示例如下两篇文章:

Android Graphics 显示系统 - Surface绘图示例(四)

Android Graphics 显示系统 - Surface绘图示例(五)

多屏同显、异显示例

Android Graphics 多屏同显/异显 - C++示例程序(标准版)

Android Graphics 多屏同显/异显 - C++示例程序(升级版)

本文我们就把前面提到的示例移植到Android 14平台。

2 准备Android 14开发环境

首先自己准备下Android 14的源码。我这里还是从清华大学开源软件镜像站下载,如下命令:

mkdir android-14
cd android-14
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-14.0.0_r11
repo sync

有了源码后,可以按照之前的构建模拟器的方法编译和运行模拟器

Android Graphics 显示系统 - 如何模拟多(物理)显示屏?

准备工作就绪,开干!!

3 Surface绘图示例

个人水平有限,早前写的代码确实比较糟糕,这次顺带也稍微整理下代码。

目前源码分为了四个分支:

  • main : 基于Android 12平台开发,采用旧有的native_window_xxxx api实现;

  • main_bbq : 基于Android 12平台开发,采用BLASTBufferQueue实现;

  • android_u :基于Android 14平台开发,采用旧有的native_window_xxxx api实现;

  • android_u_bbq :基于Android 14平台开发,采用BLASTBufferQueue实现;

Android 14相比12确实在API上有了一点变化,主要是一些binder interface的定义改为了AIDL定义方式,详细的可以对比参考:

/frameworks/native/libs/gui/include/gui/
/frameworks/native/libs/gui/aidl/android/gui/

比如12上还有在头文件中ISurfaceComposerClient定义

/frameworks/native/libs/gui/include/gui/ISurfaceComposerClient.h

class ISurfaceComposerClient : public IInterface

14上就定义在了AIDL文件里了

/frameworks/native/libs/gui/aidl/android/gui/ISurfaceComposerClient.aidl

/** @hide */
interface ISurfaceComposerClient 

系统编译阶段,会根据aidl定义自动生成对应接口的头文件定义和C++实现(中间产物),比如ISurfaceComposerClient会生成在目录:

out/soong/.intermediates/frameworks/native/libs/gui/libgui_aidl_static

执行

find -name "*SurfaceComposerClient*"

会找到想要的定义,比如

在目录out/soong/.intermediates/frameworks/native/libs/gui/libgui_aidl_static下执行

$ find -name "*SurfaceComposerClient*"
./android_vendor.34_x86_silvermont_static/gen/aidl/android/gui/ISurfaceComposerClient.cpp
./android_vendor.34_x86_silvermont_static/gen/aidl/android/gui/BnSurfaceComposerClient.h
./android_vendor.34_x86_silvermont_static/gen/aidl/android/gui/ISurfaceComposerClient.h
./android_vendor.34_x86_silvermont_static/gen/aidl/android/gui/BpSurfaceComposerClient.h

另外就是SurfaceComposerClient中有API的删改,大家可以自行对比头文件定义,在此不赘述。

单屏幕演示效果

红色->蓝色->绿色背景交替展示

图片

多屏幕演示效果

  1. 通过dumpsys display 获取每一个屏幕的layerStack

  2. 设置参数 -d layerStack,这样就可以显示到指定的屏幕上

图片

4 多屏同显/异显示例

移植到Android 14平台上修改适配的内容和Surface绘图示例是差不多的,我这里就不赘述了,可以自行查看源码对比。

效果还是老样子:

图片

5 示例源码

阅读原文,下载获取示例源码

Android Graphics 显示系统 - Android 14(U)编译、运行Surface绘图示例

Android Graphics 显示系统 - Android 14(U)编译/运行多屏同显/异显示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/645458.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】二叉树进阶(二叉搜索树)

目录 一、内容安排说明二、 二叉搜索树2.1 二叉搜索树概念2.2 二叉搜索树操作2.2.1 二叉搜索树的查找2.2.2 二叉搜索树的插入2.2.3 二叉搜索树的删除 2.3 二叉搜索树的代码实现2.3.1 二叉搜索树的节点设置2.3.2 二叉搜索树类的框架2.3.3 二叉搜索树的查找函数2.3.3.1 非递归方式…

跨平台之用VisualStudio开发APK嵌入OpenCV(二)

开始干 新建解决方案,新建动态库(Android)项目 功能随便选一个吧,就模仿PS(Photoshop)的透视裁切功能,一个物体(比如扑克牌)透视图,选4个顶点,转…

2000 年至 2015 年中国(即水稻、小麦和玉米1km 网格)三种主要作物年收获面积的时空变化

摘要 可靠、连续的主要作物收获面积信息对于研究地表动态和制定影响农业生产、土地利用和可持续发展的政策至关重要。然而,中国目前还没有高分辨率的空间明确和时间连续的作物收获面积信息。全国范围内主要农作物收获面积的时空格局也鲜有研究。在本研究中&#xf…

【深度学习】第1章

概论: 机器学习是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析,其基础主要是归纳和统计。 深度学习是一种实现机器学习的技术,是机器学习重要的分支。其源于人工神经网络的研究。深度学习的模型结构是一种含多隐层的神经…

长安链使用Golang编写智能合约教程(一)

编写前的注意事项: 1、运行一条带有Doker_GoVM的链 2、建议直接用官方的在线IDE去写合约,因为写完可以直接测,缺点只是调试不方便。 3、自己拉环境在本地写合约,编译时注意编译环境,官方有提醒你去Linux下去编译。 …

【2024.5.26 软件设计师】记录第一次参加软考(附资料)

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux 😘欢迎 ❤️关注 👍点赞 🙌收藏 ✍️留言 文章目录 前言考试分析选择题案例分析题话外 软考总结资料 前言 这是我第一次参加软考,其实我并…

到底该用英文括号还是中文括号?

这篇博客写的还挺详细的,不错。

如何使用多种算法解决LeetCode第135题——分发糖果问题

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…

美甲店会员预约系统管理小程序的作用是什么

女性爱美体现在方方面面,美丽好看的指甲也不能少,市场中美甲店、小摊不少,也跑出了不少连锁品牌,70后到00后,每个层级都有不少潜在客户,商家需要获取和完善转化路径,不断提高品牌影响力与自身内…

【图解IO与Netty系列】IO的同步与异步、阻塞与非阻塞,Linux五种IO模型

IO的同步与异步、阻塞与非阻塞,Linux五种IO模型 IO的同步与异步,阻塞与非阻塞阻塞IO与非阻塞IO同步IO与异步IO Linux五种IO模型BIONIOIO多路复用信号驱动IOAIO IO的同步与异步,阻塞与非阻塞 我们有时会看到类似于同步阻塞式IO、同步非阻塞式…

【二叉树算法题记录】236. 二叉树的最近公共祖先

题目链接 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个…

STL---unordered set和unordered multiset【无序集合】

1.1 定义及初始化&#x1f357; 下面列出常用的初始化方式 #include <unordered_set> #include <iostream> using namespace std; //输出s中的所有元素 template<typename T> void Show(const T& s) {for (auto& x : s) …

操作系统实验四:多线程与信号量编程

操作系统实验上机 更多技术请访问&#xff1a;www.xuanworld.top 部分审核不通过的文章将发至个人博客&#xff1a;www.xuanworld.top 欢迎来52破解论坛阅读帖子&#xff1a;https://www.52pojie.cn/thread-1891208-1-1.html 实验名称实验序号实验日期实验人多线程与信号量…

信号量——多线程

信号量的本质就是一个计数器 在多线程访问临界资源的时候&#xff0c;如果临界资源中又有很多份分好的资源&#xff0c;那么就可以通过信号量来表示里面还有多少份资源&#xff0c;且每份资源只有一个线程可以访问 线程申请信号量成功&#xff0c;就一定有一份资源是你的&…

Golang并发编程-协程goroutine的信道(channel)

文章目录 前言一、信道的定义与使用信道的声明信道的使用 二、信道的容量与长度三、缓冲信道与无缓冲信道缓冲信道无缓冲信道 四、信道的初体验信道关闭的广播机制 总结 前言 Goroutine的开发&#xff0c;当遇到生产者消费者场景的时候&#xff0c;离不开 channel&#xff08;…

基于Matplotlib包实现可视化①——折线图绘制

Matplotlib 是一个用于创建静态、动画、 和交互式可视化的第三方库&#xff0c;也是我们在借助Python进行数据可视化时经常使用到的库&#xff0c;具有较强的可视化能力。 为让大家有一个更为直观的认识&#xff0c;这里我随机从其官方网页中摘取了几张图片。 按照惯例&#x…

【安装笔记-20240523-Windows-安装测试 ShareX】

安装笔记-系列文章目录 安装笔记-20240523-Windows-安装测试 ShareX 文章目录 安装笔记-系列文章目录安装笔记-20240523-Windows-安装测试 ShareX 前言一、软件介绍名称&#xff1a;ShareX主页官方介绍 二、安装步骤测试版本&#xff1a;16.1.0下载链接功能界面 三、应用场景屏…

2024年【危险化学品经营单位安全管理人员】考试及危险化学品经营单位安全管理人员考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员考试考前必练&#xff01;安全生产模拟考试一点通每个月更新危险化学品经营单位安全管理人员考试资料题目及答案&#xff01;多做几遍&#xff0c;其实通过危险化学品经营单位安全管理…