投屏音视频基础知识-千里马安卓framework手把手带你做投屏

Android Framework车载双屏互动:从架构设计到车规级实现 在智能座舱与物联网领域,设备间的无缝协同已成为核心体验。其技术原理通常基于分布式系统架构,通过中间件实现异构设备间的发现、连接与数据同步,从而将计算与显示能力解耦并重组。这一技术的核心价值在于打破硬件边界,实现资源(如算力、屏幕、传感器)的高效共享与体验的连续性。典型的应用场景包括跨设备应用流转、多屏协同办公以及本文聚焦的智能座舱双屏互动。在车载环境下,该技术面临高可靠性、低延迟与严苛安全性的独特挑战。以Android Framework为基础进行深度定制,构建包含虚拟显示管理、输入事件注入与低延迟编解码传 阅读详情

音频

1、声音的基础知识

声音的产生是由于物体的振动,造成空间内空气的波动而共鸣发音,再由大气的传播,使人的听觉神经感受到的一种物理现象。

声音的三要素是响度,音调和音色。

响度
和声音震动的幅度有关,用的力越大,人的鼓膜震动幅度就越大,发出的声音越响。

音调
主要是和频率有关。声波的频率越高,音调也越高。

音色
在同样的音调(频率)和响度(振幅)下,钢琴和小提琴的声音听起来是完全不相同的,因为它们的音色不同。

声音传播的介质是固体、液体、气体。介质不同,传播的速度也不同。真空的情况下声音是无法传播的。

2、数字音频

对自然界的声音(模拟信号)进行采样,采样就是根据奈奎斯特定理在时间轴上对信号进行数字化信号,即按照一定时间间隔△t 在模拟信号 x(t)上逐点采取其瞬时值。采样率越高,声音的还原程度越高,质量就越好,同时占用空间会变大。

量化是用有限个幅度值近似原来连续变化的幅度值,把模拟信号的连续幅度变为有限数量的有一定间隔的离散值。

编码是按照一定的规律,把量化后的值用二进制数字表示,然后转化成二值或多值的数字信号流。这样得到的数字信号通过可以通过电缆,卫星通道等数字线路传输。在接收端与上述模拟信号数字化过程相反,再经过后置滤波再恢复成原来的模拟信号。

上面数字化的过程又叫做脉冲编码调制,通常我们说的音频的裸数据格式就是脉冲编码调制(PCM)数据。

描述一段 PCM 数据需要几个量化指标,常用的量化指标是采样率,位深度,字节序,声道数。

采样率(Sample rate):每秒钟采样多少次,以 Hz 为单位。

位深度(Bit-depth):表示用多少个二进制位来描述采样数据,一般为 16bit。

字节序:表示音频 PCM 数据存储的字节序是大端存储(big-endian)还是小端存储(little-endian),为了数据处理效率的高效,通常为小端存储。

首先明白字节序,字节序指占内存超过1个字节类型的数据在内存中存放顺序,通常有大端和小端两种顺序:
在这里插入图片描述在这里插入图片描述

声道数(channel number):指支持能不同发声(注意是不同声音)的音响的个数;单声道(1 个声道),双声道(2 个声道)等;

3、音频压缩编码

以 CD 音质来说,量化格式是 2 字节,采样率是 44100,声道数是 2,这些信息就描述了 CD 的音质。那么 CD 的数据采样率 =44100x16x2=1378.125kbps, 在 1 分钟的时间里 ,需要占用的存储空间=1378.125 * 60/8/1024=10.09MB。直接存储这个大小音频的话其实并不小。

压缩算法包括有损压缩和无损压缩。

常用的音频编码方式有以下几种:

MP3,MPEG-1 or MPEG-2 Audio Layer III,是曾经非常流行的一种数字音频编码和有损压缩格式 , 它被设计来大幅降低音频数据量 。

AAC,Advanced Audio Coding,是由 Fraunhofer IIS、杜比实验室、AT&T、Sony 等公司共同开发, 在 1997 年推出的基于 MPEG-2 的音频编码技术。AAC 比 MP3 有更高的压缩比,同样大小的音频文件,AAC 的音质更高。

视频相关

视频基本概念

(1)根据视觉暂留原理,连续的图像变化每秒超过24帧(Frame)画面以上时,人眼无法辨别单幅的静态画面,看上去是平滑连续的视觉效果,这样连续的图像画面构成即视频。
在这里插入图片描述

(2)一个完整的视频文件主要由音频和视频两部分组成的,视频编码是为了压缩视频数据而做的一种压缩算法,是音视频质量的决定因素;视频封装格式也叫做容器 Container,它是将已经编码压缩好的视频流、音频流以及元数据按照一定的结构规则编排放到一个文件中,不同封装格式编排规则不一样,应用场景和优点也不同。
视频文件的播放流程
在这里插入图片描述

像素:
屏幕显示是把有效面积化为为很多个小格子,每个格子只显示一种颜色,是成像的最小元素,因此就叫做“像素”。

分辨率:
屏幕在长度和宽度这俩个方向上各有多少像素,就叫做分辨率,一般用 AXB 来表示。分辨率越高,每个像素的面积越小,显示效果就越平滑细腻。

每一个像素点的 RGB 通道分别对应屏幕位置上的子像素点绘制到屏幕上,进而显示整个图像。

1、RGB 表示图像

一张图像是由每个像素点绘成的,那么一像素点的 RGB 又该如何表示呢?

浮点表示

归一化表示,取值范围 0.0~1.0,如 openGL 对每个子像素点的表示方式。

整数表示

取值范围 0~255 或者 00~FF,8bit 表示一个子像素。

如图像格式 RGBA_8888,表示 4*8bit 表示一个像素,而 RGB_565 用 5 + 6 + 5 bit 表示一个像素。一张 1280 * 720, RGBA_8888 格式的图片的大小= 1280 * 720 * 32bit = 1280 * 720 * 32 / 8 byte,也是位图在内存中占用 的大小。所以每一张图像的裸数据都是很大的。

2、YUV 表示图像

YUV (又称为 YCbCr),一种亮度与色度分离的色彩格式;

Y : 亮度,即灰度值,除了表示亮度信号外,还含有较多的绿色通道量;

U : 蓝色通道与亮度的差值;

V : 红色通道与亮度的差值;

YUV 的优势,人眼对亮度敏感,对色度不敏感,因此减少部分 UV 的数据量,人眼无法感知,从而可以通过压缩 UV 的分辨率, 在不影响观感的前提下,减小视频的体积;

视频帧裸数据之所以采用 YUV 色彩空间,使用为亮度信号 Y 和色度信号 UV 是分离的。当无 UV 色度信号,只有 Y 亮度信号时,那么这样表示的图像就是黑白灰度图像。彩色电视正是使用 YUV 空间使用 Y 亮度信号解决彩色电视与黑白电视的兼容问题、使黑白电视也能接收彩色电视信号。最常用的 YUV 都使用 8 个 字节来表示,所以取值范围就是 0~255。

音频最开始需要采样,图像也是一样的,YUV 最常用的采样格式是 4:2:0。

YUV 格式有两大类:planar 和 packed
YUV420 Planar

YYYY
YYYY
UU
VV

YUV 444 Packed

YUV YUV
YUV YUV

YUV 码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2, YUV4:2:0。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

YUV 4:4:4 采样,每一个 Y 对应一组 UV 分量。YUV 4:2:2 采样,每两个 Y 共用一组 UV 分量。YUV 4:2:0 采样,每四个 Y 共用一组 UV 分量。

3、YUV 和 RGB 转化

凡是渲染到屏幕上的东西(文字、图片或者其他),都要转换为 RGB 的表示形式,那么 YUV 的表示形 式和 RGB 的表示形式之间是如何进行转换的呢?

为了实现格式转换,我们首先要明确待转换格式和目标格式的特点和相互转换关系,这是编程实现转换的核心。对于 RGB 转 YUV 的过程,我们要首先拿到 RGB 文件的数据,再通过上图的 YUV 计算公式对其做 运算,得到 YUV 数据,从而实现转换。而对于 YUV 转 RGB 则要首先获得 YUV 数据,用第二组 RGB 公式计 算得到 RGB 数据。在本实验中,转换公式如下。

Y = 0.298R + 0.612G + 0.117B;
U = -0.168R - 0.330G + 0.498B + 128;
V = 0.449R - 0.435G - 0.083B + 128;

R = Y + 1.4075( V - 128);
G = Y - 0.3455( U - 128) - 0.7169( V - 128);
B = Y + 1.779( U - 128);

视频编码

视频压缩必要性

以常见的1080P60的视频计算一下没有压缩时数据量的大小(按红绿蓝三原色各一个字节数据量计算)

一秒钟数据量:1920(宽)x 1080(高)x 60(每秒帧数)x 3(像素3原色字节)= 373.248MB = 2.98Gbs

一小时数据量:373.248MB x 3600秒 = 13.43T字节/小时

这个数据量很大,近3G的原始数据量在任何常规网络上都无法实现视频的传输。因此我们就需要一种数据处理方式将海量的原始图像数据压缩到可在互联网上传输的数据量,这个过程叫做视频的编码。

视频压缩原理

帧内压缩

(1)将帧画面进行分层压缩(Y层:亮度相关、cr层:颜色相关、cb层:颜色相关),人对黑白亮度非常敏感,对颜色不太敏感,所以Y层尽量减少压缩,cr层、cb层多压缩。

(2)宏块压缩:一帧画面可以分层很多方块,相同的方块可以压缩,不同的保留

帧间压缩

I帧:关键帧,记录一帧完整的数据

P帧:前向帧,记录本帧与前一帧不同的数据。

B帧:双向帧,记录本帧与前帧和下一帧不同的数据。

在这里插入图片描述

帧与帧率

帧,视频的一个基本概念,表示一张画面,一个视频就是由许多帧组成的;

帧率,即单位时间内帧的数量,单位为 : 帧/秒 或 fps(frames per second),帧率越高则画面越顺滑过渡越自然;

硬解码和软解码

软解码,指利用 CPU 的计算能力来解码,通常若 CPU 的能力不是很强的时候,一则解码速度会比较慢,二则手机可能出现发热现象;但是, 由于使用统一的算法,兼容性会很好;

硬解码,指的是利用专门的解码芯片来加速解码,通常硬解码的解码速度会快很多,但是由于硬解码由各个厂家实现,质量参差不齐,非常容易出现兼容性问题;

更多framework实战干货,请关注下面“千里马学框架”

Android Framework构建智能座舱双屏互动:架构、通信与车规级实践 在智能汽车与物联网融合的背景下,跨设备协同成为提升用户体验的关键技术。其核心原理在于构建高效、可靠的通信中间件,通过服务化架构抽象硬件差异,实现数据与状态在多终端间的实时同步。这项技术的核心价值在于打破信息孤岛,为安全、便捷的智能交互提供基础支撑,广泛应用于智能座舱、车载信息娱乐系统及物联网场景。以当前热门的“双屏互动”为例,它正是该技术在车载领域的具体实践,通过深度整合车机与手机能力,实现导航流转、疲劳监测等智能场景。本文聚焦于基于Android Framework构建高可靠跨设备通信通道与状态同步机制, 阅读详情

相关推荐

从零开始:手把手教你规划与部署华为FusionCompute虚拟化平台(含网络规划避坑指南)

本文详细介绍了华为FusionCompute虚拟化平台的规划与部署流程,特别针对网络规划中的常见问题提供了避坑指南。从硬件软件清单检查、网络平面配置到VRM部署方案选择,帮助用户高效完成部署并优化性能,适用于云计算环境中的虚拟化平台搭建。

weixin_28693447的博客 243

android framework实战-跨进程通信binder专题

千里马8年Android系统及应用开发经验,曾担任过美国unokiwi公司移动端技术总监兼架构师,对系统开发,性能优化,应用高级开发有深入的研究,Android开源定制ROM Lineage的贡献者之一,国内首家线下开辟培训Android Framework课程,拥有2年的Android系统培训经验。成为腾讯课堂专业负责android framework课程分享第一人,致力于提高国内android Framework水平Android Framework领域内是国内各大手机终端科技公司需要的人才,应用开发者都对Android系统充满着好奇,其中的binder是重中之重,都说无binder无Android,binde是Android系统的任督二脉。课程水平循序渐进,由中级再到高级,满足各个层次水平的android开发者。1、灵活使用binder跨进程通信,在app端对它的任何api方法等使用自如2、可以单独分析android系统源码中任何binder部分,分析再也没有难度3、掌握binder驱动本质原理,及对应binder驱动怎么进行跨进程通信,及内存等拷贝方式数据等4、对binder从上层的java app端一直到最底层的内核binder驱动,都可以顺利理通5、针对系统开发过程中遇到的binder报错等分析方法,及binder bug案例学习6、针对面试官任何的binder问题都可以对答自如7、socket这种跨进程通信实战使用8、针对android源码中使用的socket源码轻松掌握9、android系统源码中最常见的socketpair中双向跨进程通信10、使用socket实现一个可以让app执行shell命令的程序

嵌入式通讯协议全解析:UART、I2C、SPI、CAN与Modbus实战指南

通讯协议是嵌入式系统设计的核心基础,也是面试与工程实践中避不开的关键环节。从串口UART的异步收发,到I2C总线寻址与SPI高速全双工传输,再到RS485差分长距离通信、CAN总线多主仲裁机制,以及工业领域事实标准的Modbus RTU协议,每一种技术都对应着特定的应用场景与设计权衡。理解协议背后的物理层原理、时序特征和工程坑点,才能真正解决设备间通信的选型、调试与健壮性问题。本文从基础概念出发,系统梳理各类嵌入式通讯协议的工作机制,并结合实际代码示例与对比表格,帮助开发者在面对面试问题或项目设计时,构建从

weixin_42520573的博客 276

深入Android Framework开发(入门篇)

广大的Android应用开发者是不是对Android系统充满着好奇,是不是很想学习Android系统开发,可惜自己学习难度又太大,本课程将手把手教你学Android Framework开发,带你走进Android系统开发的殿堂,全课程以实战为主,让你自己动手可以定制自己喜欢的Android系统,让你的Android职业道路越走越顺。 学完本课程能让你学会如下知识点: -学习Framework背景及它的巨大作用-Android源码环境搭建及让自己系统第一次跑起来-学习Frameowork开发的一些必要基础知识-学习怎么进行Android源码定位分析,实例:Activity启动流程源码分析-实战开发Frameowork项目--去除第三方应用入口广告页

Word公式批量转MathType终极指南:解决omml2mml.xsl缺失与格式调整难题

本文提供Word公式批量转MathType的终极解决方案,重点解决常见的omml2mml.xsl文件缺失问题,并详细讲解批量转换与格式调整技巧。通过补全文件路径、分批次转换及样式预设等方法,大幅提升学术论文公式编辑效率,适用于Office 2016及以上版本。

weixin_28419039的博客 1350

Minitab田口设计实战:如何用正交试验优化遗传算法参数(附完整操作步骤)

本文详细介绍了如何利用Minitab田口设计进行遗传算法参数优化,通过正交试验方法显著提升效率。文章涵盖实验设计、Minitab操作步骤、结果分析及高级技巧,帮助工程师快速掌握这一工业级优化技术,实现算法性能的显著提升。

wind6的博客 865

千里马android framework车机车载手机智能驾驶双屏互动实现方案

这个就是没有动画版本的双屏互动,功能其实也是实现的,但是体验是不是感觉起来差的太多,而且还带有黑屏。2、画面A的平移,两个屏幕都要进行显示,这个难度较大,得考虑好相关的画面怎么都可以显示在两个屏幕。这里其实不需要写代码,可以直接调用am display相关的命令即可以实现这个方法的调用。不过还好的是功能可以用,那么我们也根据wms课程基础后也来实现一下这个双屏互动的功能。1、多指全局动作监听,而不是在某个app的onTouch里面监听,这里其实之前的。

learnframework的博客 5967

EL6751实战指南:从协议解析到工业现场部署

本文详细介绍了EL6751网关在工业通信协议转换中的应用,从CANopen协议解析到EtherCAT系统部署的实战指南。通过协议栈位置、数据封装方式和通信模型差异的深入分析,帮助工程师高效实现EtherCAT主站与CANopen从站设备间的无缝对接,提升工业现场通信效率。

weixin_30338481的博客 547

千里马android framework开发解决Accessing hidden method限制,让应用访问隐藏方法(需要可以修改系统源码方案)

hi,粉丝朋友们大家好! 今天来给大家分享一下,就是经常大家会做安卓系统开发工作问到一个问题,那就是我如果framework代码中增加了一个方法啥的,但是我又不想公开给第三方应用知道,只想让我系统的应用知道,那该怎么办呢?其实这个时候经常就会用到一个hidden的标签,来代表这个方法是隐藏方法,隐藏方法就是给系统内部用的,意味着第三方app就无法使用。这个其实也很常见,自从android p开始android系统就开始对访问hidden的限制越来越严格,虽然我们网络上有各种奇葩招来逃避不允许调用hidden

learnframework的博客 1万+

泄露测试仪CTS的Sentinel I28使用

本文介绍:泄露测试仪CTS的Sentinel I28使用

qq_34047402的博客 2202

【量化交易】迅投QMT——基础操作新建策略导入策略!

策略指标 #基础操作 #新建策略 在【我的】主页,点击新建策略按钮 点击【pyhton策略】模型 会弹出一个策略编辑器框 【新建策略文件】 编辑完点击【编译】按钮 关闭策略编辑器 导入策略 券商 QMT:1. 点击进入【模型研究】界面2. 右键 -> 选择本地. rzrk导入 投研端:1. 点击【行情】界面,选择模型2. 右键 -> 选择本地. rzrk导入 #策略在副图作为指标运行 在主图上双击策略 VBA策略可以直接输出图像

weixin_eng02048的博客 4108

HIDL实战开发-千里马android framework车载车技手机系统开发

上面default默认生成的bp是so,这里要把他变成可执行的服务,需要增加一个service.cpp作为main方法载体。需要在自己设备目录找到自己的manifest.xml然后加入自己的hidl。5、添加service.cpp,自启动rc,修改Android.bp。4、生成一个自动生成 hal 接口的 Android.bp。6、需要搞个test,来测试一下服务是否ok,这个时候需要。主要目的是把test目录的Android.bp可以加入编译。执行后生成如下Test.cpp,Test.h文件了。

learnframework的博客 2976

【保姆级教程】基于UNet++&MobileNetv2的语义分割模型从训练到RK3588部署:让边缘AI落地效率提升300%

通过SMP库一键构建encoder_name="mobilenet_v2", # 选择MobileNetv2作为骨干encoder_weights="imagenet", # 加载预训练权重加速收敛in_channels=3, # 输入图像通道数(RGB)classes=29, # Cityscapes数据集类别数activation=None # 输出无激活,便于后续损失计算本教程从“模型设计-训练-转换-边缘部署”全链路拆解了。

m0_71589036的博客 89

必学音频干货调试技巧:命令dumpsys audio相关信息剖析

其实在audio的开发中另一个命令dumpsys audio 也是非常常见的的,特别是在音频焦点,音量调节部分的调试,音频设备连接等等,那么下面就重点聊一下dumpsys audio这个命令。因为输出的信息很多,我们只对重要的,常用的几个部分进行讲解,比如音频音量相关,音频焦点相关,其他部分大家也完全可以自己去AudioService的dump方法中追一些既可以。Event日志详细记录了音量变化的操作记录,经常可以用于音量不知道被谁改变的一个依据,比如是音量键操作还是说设置的音量条滑动操作。

learnframework的博客 1027

visio安装包

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

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

音频调试技巧分享:mediametrics::LogItem相关日志如何查看?

本文介绍了Android音频系统中mediametrics日志的查看方法。在音频开发过程中,经常会在代码中看到mediametrics相关的日志打印,这些日志由MediaMetricsService统一管理。通过dumpsys media.metrics命令可以查看这些日志,支持--all、--clear、--prefix等参数来过滤和筛选日志内容。例如使用--prefix audio.track可以查看AudioTrack相关的详细操作记录。文章还提供了代码中mediametrics日志打印的示例,并建议

liaosongmao1的专栏 35

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

春节后如何高效投入工作?--祝大家开工大吉

不过,一些人的生物钟还停留在春节期间到处走亲访友,热闹非凡,一家人团圆,其乐融融的轻松惬意里,还没有走出假期营造出的心理舒适区,导致工作没办法集中注意力,工作效率低下,没办法重启工作模式,疲劳焦虑等症状。‌工作从简单任务入手‌,提前梳理并列出工作清单,明确优先顺序,让心理提前过渡。可以‌给自己半天到一天的缓冲期‌,优先处理‌整理文件、回复消息等常规性事务‌,逐步建立信心后再过渡到复杂任务。如果公司整体工作较少,因为很多,可以尝试多学习马哥课程,积极参与vip群的技术讨论,不断获取知识带来的成就感。

learnframework的博客 108

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android 经典hal开发实战-千里马android framework车载车机手机系统开发

上面的load方法就是我们说的hardware动态性的关键,它是在运行时候才真正依赖具体硬件抽象so,编译期间只需要依赖公共的hardware相关公共类既可以,不需要so,所以这里就给硬件抽象提供商带来很大灵活性,哪怕硬件厂商不提供也一般会有一个default的so保证不会产生什么严重的崩溃和强依赖问题,大大减低了aosp的代码对于硬件抽象的各个厂商的耦合性。在结构体 hw_module_methods_t 中只有一个成员,它是一个函数指针,名字是open,它主要作用就是用来打开硬件抽象层中给的硬件设备。

learnframework的博客 2783

第二节-安卓多屏双屏实战车载车机智能驾驶舱开发/千里马android framwork开发

hi,粉丝朋友们!上一节已经对车载的多屏互动进行了相关的技术方案介绍,以及相关的核心方法moveRootTaskToDisplay的讲解和使用。本节就来进行代码实战。

learnframework的博客 4405

千里马Android Framework实战开发-跨进程通信专题博客总结

千里马Android Framework实战开发-跨进程通信专题课表介绍 因为课程还剩下最后一部分binder驱动没有讲完,但是粉丝同学们已经迫不及待想要要提前看,这里就先分享一个课表给大家,提醒一下,课表的很大,你忍一下。。。。。 预计一星期左右可以上线全部视频,大家敬请期待课程杀青 ...

learnframework的博客 4279

clearCallingIdentity与restoreCallingIdentity-千里马framework系统源码实战详解

hi,粉丝朋友大家好:今天带大家来学习一个系统开发过程中大家即“熟悉”又陌生的两个方法,分别是clearCallingIdentity和restoreCallingIdentity,一般他们是成对出现在我们的framework代码中,但大家平时分析源码时候好像并没有在意他的真正作用是什么?为啥在框架代码分析时候可以看到他的大量出现?

learnframework的博客 1308

千里马2024年终总结-android framework实战

心里焦虑加大了,需要调节好平常心面对创业以来最大感受就是“创业艰难”,原本预想的很美好,终于可以有勇气为了理想和兴趣奋斗了,一定是每天满怀激情的干。实际情况是:当自己的兴趣与谋生的收入挂钩时候,一切变得不那么理想和美好。每天还是会有担心自己课程的销售情况,必然就会有焦虑,这种心态和上班兼职搞完全不是一回事。所以心态上确实是相比以前有焦虑一些,这个部分做的不够好。时间不够用创业初期,也没有很多资金搞团队,大部分工作都落到我的头上,比如一些售前咨询,课程研发录制,答疑服务等。

learnframework的博客 2003

千里马Android Framework实战开发-Binder通信之startActivity跨进程源码分析

上节课我们已经讲解完了Binder常见使用的一些方法,下面这节课我们来讲解一些Binder跨进程通信在平时Framework及SystemServer源码分析场景。 (注意这个分析是基于我们的android 10,因为课程上讲过android 8.1,也相对比较清楚了,这里blog就单独写一下android 10,因为和8.1有一些差异,这样可以多学习到android 10的情况) 首先我们来看一副图: 1、 startActivity源码分析 上面是不是我们常见的一种App与系统SystemServer

learnframework的博客 1022
上一篇: aosp 14的WMShell相关的proto日志如何查看打印-framework分屏相关
下一篇: 安卓系统应用,框架framework开发必须要会的Settings值传递接受数据
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值