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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值