自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 ijkplayer定制化编译

ijkplayer是一款由哔哩哔哩公司开发的基于FFmpeg的播放器SDK开源架构,是值得音视频开发人员进行研究和使用的。上手ijkplayer第一步就是要学会编译。这里记录一下编译相关过程。本文是在安卓平台上开发的,所以主要记录的也是ijkplayer-android的编译过程,环境是在Ubuntu下编译的。

2024-05-09 09:42:20 622

原创 DLNA设备控制分析

DLNA设备、服务的注册及发现(依赖开源库cling),DLNA中设备的注册、发现主要基于UPNP协议实现,这是微软推行的一个标准。Upnp最大的愿景是希望任何设备只要一接入网络,所有网上的设备马上就能知道有新设备加入,这些设备之间就可以彼此通信。

2024-05-07 10:20:06 702

原创 DLNA源码分析之render启动

DLNA设备、服务的注册及发现(依赖开源库cling),DLNA中设备的注册、发现主要基于UPNP协议实现,这是微软推行的一个标准。Upnp最大的愿景是希望任何设备只要一接入网络,所有网上的设备马上就能知道有新设备加入,这些设备之间就可以彼此通信。

2024-05-06 14:35:20 420

原创 DLNA设备的发现

在RouterImpl.java中的startAddressBasedTransports()方法,对DatagramIOImpl初始化后,会将其放入线程池运行,所以直接看DatagramIOImpl的run方法。接着看SendingSearch.java,搜索数据包的信息,搜索请求消息没间隔500毫秒,发送一次,共发送5次。因为这个时候并不知道,这个远端设备是根设备,还是嵌入设备,所以还要去解析它的描述符,然后在处理添加。它的实现类可以被多个线程并发调用,所以他应该是线程安全的。

2024-04-30 11:30:49 278 3

原创 DLNA源码分析之render设备注册

DLNA设备、服务的注册及发现(依赖开源库cling),DLNA中设备的注册、发现主要基于UPNP协议实现,这是微软推行的一个标准。Upnp最大的愿景是希望任何设备只要一接入网络,所有网上的设备马上就能知道有新设备加入,这些设备之间就可以彼此通信。

2024-04-29 15:40:56 959 2

原创 UPnP协议分析

UPNP(Universal Plug and Play)即通用即插即用协议, 是为了实现电脑与智能的电器设备对等网络连接的体系结构。而内网地址与网络地址的转换就是基于此协议的,因此只要我们的路由器支持 upnp,并且我们使用支持此协议的 操作系统,那么我们就可以借此提高点对点传输速度。简单的来说,UPnP 最大的愿景就是希望任何设备只要一接上网络,所有在网络上的设备马上就能知道有新设备加入,这些设备彼此之间能互相沟通,更能直接使用或控制它,一切都不需要设定,完全的 Plug and Play。

2024-04-28 19:40:22 1097

原创 投屏协议DLNA

DLNA全称为(数字生活网络联盟),旨在解决个人电脑,消费电器,移动设备在内的无线网络和有线网络的互联互通,使得数字媒体和内容服务的无限制的共享和增长成为可能,为设备厂商提供了构建互操性数字化家庭设备和平台的必要信息。我们的设备(PC,手机,电视等)可以通过DLNA在局域网内进行多媒体(图片以及音视频)的分享,这就是DLNA的功能,就是DLNA。有了DLNA,我们可以把音乐投送到音质更好的音响上去,可以把视频投送到屏幕更大的电视上去。

2024-04-28 15:07:52 1636

原创 android开源投屏工具scrcpy简介

首先,我们来认识一下Scrcpy。Scrcpy 是一个开源的命令行工具软件,被设计用于使计算机用户能通过android adb或通过usb数据线控制其Android设备,支持通过鼠标和键盘对Android设备操作,更重要的是无需root权限。开源地址:https://github.com/Genymobile/scrcpy电脑上安装scrcpy后,执行scrcpy命令,弹出镜像窗口如下,

2023-10-17 09:20:56 8726 1

原创 车载娱乐系统之Android系统CarFramework流程

Android Automotive OS 定义了标准的硬件抽象层HAL(Hardware Abstraction Layer)来规范各个子系统与Framework的调用接口, 并且通过CarService以及相关的Car API对上层应用提供标准编程接口。

2023-09-25 10:39:04 644

原创 中小型互联网公司如何搭建自己的技术架构

业务数据 业务量,我们自己是新闻业务,可能会有其他的业务,比如游戏,商城等等,基本每天新增的业务数据都会在同一个量级, 每日10000, 另外跟用户相关的信息也是比较大的一块,比如用户的订阅等行为,一共5万的用户,保存相关信息可能大概需要100条的数据。QPS, 如果是5万日活,使用集中在每天的4小时,每个用户大概产生100的请求,那么平均下来,我们系统大概应该支撑的请求为:50000。本文会对可能用到的相关技术进行技术选型的说明,以及技术的架构介绍,技术架构的介绍课程后面有地址,可以点进去查看。

2023-09-20 10:36:05 457

原创 IaaS,PaaS,SaaS 的区别

上图中,绿色的部分是云服务商决定的,紫色的部分是用户决定的。可以看到,SaaS 模式下用户没有任何自主权,只能使用给定的应用程序;PaaS 模式下可以自己安装应用程序,但是不能定制操作系统;IaaS 模式下则是云服务商提供(虚拟的)硬件,从操作系统开始都可以自己选择和定制。它与 PaaS 的区别是,用户需要自己控制底层,实现基础设施的使用逻辑。普通用户接触到的互联网服务,几乎都是 SaaS,下面是一些例子。微软的 Azure 云服务有一张图,解释这三种模式的差异。越来越多的软件,开始采用云服务。

2023-09-19 09:34:17 249

原创 汽车领域专业术语

DMS:即Driver Monitoring System,监测对象为Driver(驾驶员)。DMS三大核心:OMS:即Occupancy Monitoring System,监测对象为乘客。RMS:后排盲区检测系统IMS:In-cabin monitoring System即汽车座舱的智能视觉监控系。IMS既包括DMS、OMS,也包括FACE ID、手势识别、体征监测、远程监控等。

2023-08-18 09:59:20 2914

原创 Android设备通过蓝牙HID技术模拟键盘实现

日常生活中,各种物理遥控器和鼠标等设备,需要摆放和携带,便捷性有待考验。根据蓝牙HID特性,可以用蓝牙协议模仿键盘,来实现空中键盘等功能。

2023-08-16 16:35:26 1933 5

原创 Android设备通过蓝牙HID技术模拟鼠标技术实现

日常生活中,各种物理遥控器和鼠标等设备,需要摆放和携带,便捷性有待考验。根据蓝牙HID特性,可以用蓝牙协议模仿鼠标事件,来实现空中鼠标等功能。

2023-07-28 09:38:38 2298 1

原创 官网HID描述符工具

可以看到,Resport Descriptor分两列显示,第一列为报告描述符的说明,第二列为十六进制数。修改完成以后,点击“File -> Save As”,保存为.h格式。如需要修改某些值,可以双击选中需要修改的行,如我们双击。我们通过菜单的 FILE/Open,弹出需要打开的。这里我们选择鼠标的报告描述符:mouse.hid。该工具包中,包含有大量的常用设备的报告描述符。USB规范官网提供了一个。

2023-07-26 17:46:23 1304

原创 Gerrit接入企业LDAP解决方案

在企业搭建Gerrit时,一般需要企业账号来认证,也就是gerrit的ldap方案接入。

2023-06-26 15:32:41 1171 2

原创 Android系统Handler详解

Handler是一套 Android 消息传递机制,主要用于线程间通信。用最简单的话描述,handler其实就是主线程起了一个子线程,子线程运行并生成Message,并把该消息加入主线程的message queue里,主线程的Looper从主线程的message queue获取message并传递给Handler处理。android系统为何要这么设计呢?

2023-06-25 15:23:26 738

原创 基于Gerrit管理Android代码

Android源码是基于Linux的开源操作系统,目前Android ROM开发的代码管理工具基本上是采用Git。由于Android代码非常复杂,Google将其划分为多个git repo,这样不仅可以避免一个repo的代码太多,还可以根据repo的功能将其分配给不同团队进行管控。为了对Android代码质量进行管控,Google采用了Gerrit进行coderview,并利用jenkins做代码静态检测和自动化验证,当然还有集成CI工具。

2023-06-25 14:45:54 1156

原创 Gerrit搭建

一种免费、的代码审查软件,使用网页界面。利用网页,同一个团队的软件,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。它使用作为底层版本控制系统。它分支自Rietveld,作者为公司的Shawn Pearce,原先是为了管理Android计划而产生。

2023-06-25 10:23:50 2485 3

原创 Android Activity启动过程详解

ctivity启动的流程分为两部分:一是在activity中通过startActivity(Intent intent)方法启动一个Activity;二是我们在桌面通过点击应用图标启动一个App然后显示Activity;第二种方式相较于第一种方式更加全面和复杂,所以本文会以第二种流程来分析。应用的启动流程大致分为下面五个阶段:1,应用启动进程 Launcher 调用 ATMS 系统进程的过程2,ATMS 向 AMS 发送创建应用进程的过程。

2023-06-12 14:23:19 6672 5

原创 Android系统Handler详解

Handler是一套 Android 消息传递机制,主要用于线程间通信。用最简单的话描述: handler其实就是主线程在起了一个子线程,子线程运行并生成Message,Looper获取message并传递给Handler,Handler逐个获取子线程中的Message.Binder/Socket用于进程间通信,而Handler消息机制用于同进程的线程间通信可以说只要有异步线程与主线程通信的地方就一定会有 Handler。

2023-06-11 10:27:21 2371 2

原创 Android系统Binder详解

Binder机制是Android系统提供的一种跨进程通信机制,它使用代理对象、共享内存和序列化等技术,实现了进程间通信和远程调用的功能。它允许在不同进程之间进行数据传输和方法调用,实现了进程间的解耦。在Android系统中,Binder被广泛应用于各种组件之间的通信,例如Activity与Service、Service与Service、应用与系统服务等。

2023-06-09 11:13:12 1091

原创 Android中Activity、View和Window关系详解

Window、Activity、View都经常用到,但三者关系还是没有系统的理清,今天咱们就开始整理整理这三者的关系:Window:顶级窗口外观和行为策略的抽象基类。唯一实现是 PhoneWindow类。Activity:四大组件之一,它提供一个界面让用户点击和各种滑动操作。View:代表用户界面组件的基本构建块,UI 组件。

2023-06-08 15:57:36 1372 3

原创 android view绘制流程详解

Android View的绘制流程分为三大流程:测量、布局、绘制。三大流程都开始于ViewRootImpl的函数。

2023-06-07 17:46:37 1165 1

原创 android中AMS进程通知Zygote进程fork新进程的通信方式

AMS通知Zygote去fork进程的时候,使用的是socket的方式,而不是binder。我们都知道,安卓中跨进程的方式是binder,而为什么这里偏偏使用Socket呢?有点人会说LocalSocket本来就是用来本地进程间通讯的,这没错,但知其然更要知其所以然。

2023-06-06 16:02:09 671

原创 android zygote进程启动流程

Init进程启动后,最重要的一个进程就是Zygote进程,SystemServer和其他所有Dalivik虚拟机进程都是由Zygote fork而来。Zygote进程由app_process启动,Zygote是一个C/S模型,Zygote进程作为服务端,其他进程作为客户端向它发出“孵化-fork”请求,而Zygote接收到这个请求后就“孵化-fork”出一个新的进程。

2023-06-05 17:33:04 985

原创 Android系统层面限制应用开机自启动详解

车载开发过程中,在集成第三方应用为系统应用时,时常遇到第三方应用开机自启动问题。如何从系统层面限制应用开机自启动?

2023-06-02 17:48:50 1521 1

原创 Android读取系统属性详解

Android 系统属性主要有两种:SettingsProvider 和 SystemProperties。

2023-05-31 16:20:56 2292

原创 android 窗口管理机制详解

Android的窗口管理主要由Window, WindowManager, WindowManagerService三者实现。Window表示的是一种抽象的功能集合,具体实现为PhoneWindow。WindowManager是外界访问Window的入口,对Window的访问必须通过WindowManager,而WindowManger和WindowManagerService的交互是一个跨进程通信过程。

2023-05-20 10:32:43 933

原创 android应用市场点击下载APK安装详解

android的APK安装流程,有四种安装方式:1,系统应用和预制应用安装,开机时完成,没有安装界面,在PKMS的构造函数中欧冠完成安装2,网络下载应用安装,通过应用商店来完成,调用PackageManager.installPackages(),有安装界面3,ADB工具安装,没有安装界面,它通过启动pm脚本的形式,然后调用com.android.commands.pm.Pm类,之后调用到PMS.installStage()完成安装。

2023-05-19 17:04:48 4090

原创 android launcher启动流程

在Android的中,桌面应用Launcher由Launcher演变到Launcher2,再到现在的Launcher3,Google也做了很多改动。Launcher不支持桌面小工具动画效果,Launcher2添加了动画效果和3D初步效果支持,从Android 4.4 (KK)开始Launcher默认使用Launcher3, Launcher3加入了透明状态栏,增加overview模式,可以调整workspace上页面的前后顺序,可以动态管理屏幕数量,widget列表与app list分开显示等功能。

2023-05-19 12:32:31 1267

原创 Android SystemServer进程启动流程

Zygote是所有应用的鼻祖。SystemServer和其他所有Dalivik虚拟机进程都是由Zygote fork而来。Zygote fork的第一个进程就是SystemServer,其在手机中的进程名为 system_server。

2023-05-18 15:46:05 1160

原创 android init进程启动流程

init进程第一阶段做的主要工作是挂载分区,创建设备节点和一些关键目录,初始化日志输出系统,启用SELinux安全策略。init进程第二阶段主要工作是初始化属性系统,解析SELinux的匹配规则,处理子进程终止信号,启动系统属性服务,可以说每一项都很关键,如果说第一阶段是为属性系统,SELinux做准备,那么第二阶段就是真正去把这些功能落实。init进行第三阶段主要是解析init.rc 来启动其他进程,进入无限循环,进行子进程实时监控。

2023-05-16 14:09:24 1372

原创 android系统启动流程简介

4,init进程(pid=1,init进程是所有进程的鼻祖,第一个启动)启动后,会启动adbd,logd等用户守护进程,并且会启动servicemanager(binder服务管家)等重要服务,同时孵化出zygote进程,这里属于C++ Framework,代码为C++程序。6,zygote同时会启动相关的APP进程,它启动的第一个APP进程为Launcher,然后启动Email,SMS等进程,所有的APP进程都有zygote fork生成。3,Kernel层加载完毕后,硬件设备驱动与HAL层进行交互。

2023-05-16 10:26:12 1607

原创 初识Android系统

先来看看Android系统的发展过程,从2008年发布Android 1.0系统,直到2019年即将发布Android 10.0系统,下面列举些重要的时间节点。2003年10月,Andy Rubin团队创办Android公司;2005年8月,谷歌收购Android公司,Andy Rubin担任谷歌工程部副总裁继续负责Android项目;2008年9月,谷歌正式发布Android 1.0系统;2011年1月,Android系统设备的用户总数达到了1.35亿,成为智能手机领域占有量第一的系统;

2023-05-15 16:05:27 360 1

原创 android单独编译framework模块并push

【代码】android单独编译framework模块并push。

2023-05-15 14:12:29 939

原创 Android 手势导航(从下往上滑动进入多任务页面)

onInputEvent 函数中处理滑动事件,在 DOWN 事件时根据不同的场景创建不同的 InputConsumer,例如在桌面、或其他界面等不同情况下使用手势,对应的 InputConsumer 是不同的,最常见的就是 OtherActivityInputConsumer (其他Activity界面使用手势导航)。判断最终是执行的 HOMO 还是 RECENTS 等事件是在 mInteractionHandler (BaseSwipeUpHandlerV2.java) 中根据滑动中的数据具体判断。

2023-05-15 10:28:44 1900

原创 android手势分析(应用界面左往右边滑动退出应用)

其中,move状态下的 handleMoveEvent()是主要的处理逻辑:判断 x 轴的 offset 数值是否达到了阈值 mSwipeThreshold,从而 回调 BackCallback 事件 和当前视图的更新,可看出 NavigationBarEdgePanel 就是一个 自定义view,根据 控制器 传递过来的 MotionEvent 实现具体的UI 效果,并回传事件。备注:在PIXEL手机手势设置页面,关闭gesture navigation会回调。

2023-05-15 10:19:40 1646

原创 android应用安装流程详解

在InstallingAsyncTask的doInBackground()里会根据包的Uri,将APK的信息通过IO流的形式写入到PackageInstaller.Session中,最后会在onPostExecute()中调用PackageInstaller.Session的commit方法,进行安装。在上述的过程中,通过PackageInstaller维持了Session,把安装包写入到Session,真正的安装过程就要来看PMS了。在这里就通过文件流的操作,把Apk拷贝到/data/app的目录下了。

2023-05-15 10:13:13 5595

原创 android11安装应用触发桌面图标刷新流程

1, 注册监听 LauncherAppState.java。桌面应用list刷新。

2023-05-13 10:31:14 829 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除