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

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.hclass 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)编译/运行多屏同显/异显示例

相关文章:

  • 专为汽车内容打造的智能剪辑解决方案
  • 人工智能万卡 GPU 集群的硬件和网络架构
  • Microsoft VBA Excel 去重小工具
  • 解决go install 网络问题
  • 电子电器架构 - AUTOSAR软件架构介绍
  • 设计原则-
  • docker 命令总结
  • 4个宝藏网站,免费即用,办公运营效率利器!
  • Three.js 研究:2、如何让动画线性运动
  • 7.Redis之String编码方式应用场景业务
  • [书生·浦语大模型实战营]——第三节:茴香豆:搭建你的 RAG 智能助理
  • 如何从恢复出厂设置的Android手机恢复联系人?
  • 算法与数据结构汇总
  • C语言--输入一个整数代表秒数,将这个数转化为对应的小时数、分钟数、和秒数
  • 第一篇【传奇开心果系列】Python的跨平台开发工具beeware技术点案例示例:使用beeware实现跨平台开发,从hello world开始
  • $translatePartialLoader加载失败及解决方式
  • 【Amaple教程】5. 插件
  • 【技术性】Search知识
  • 2018一半小结一波
  • angular2 简述
  • EOS是什么
  • express + mock 让前后台并行开发
  • input实现文字超出省略号功能
  • js数组之filter
  • js学习笔记
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • SQLServer之创建显式事务
  • Vultr 教程目录
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 后端_ThinkPHP5
  • 前端技术周刊 2019-02-11 Serverless
  • 前端面试总结(at, md)
  • 如何解决微信端直接跳WAP端
  • 删除表内多余的重复数据
  • 微信小程序--------语音识别(前端自己也能玩)
  • 我感觉这是史上最牛的防sql注入方法类
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 湖北分布式智能数据采集方法有哪些?
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • # C++之functional库用法整理
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #QT(QCharts绘制曲线)
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $.ajax()方法详解
  • (2)leetcode 234.回文链表 141.环形链表
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)关于多人操作数据的处理策略