自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (5)
  • 收藏
  • 关注

原创 Android AIDL 使用教程

AIDL(Android Interface Definition Language)是一种 IDL 语言,用于生成可以在 Android 设备上两个进程之间进行进程间通信(IPC)的代码。 通过 AIDL,可以在一个进程中获取另一个进程的数据和调用其暴露出来的方法,从而满足进程间通信的需求。通常,暴露方法给其他应用进行调用的应用称为服务端,调用其他应用的方法的应用称为客户端,客户端通过绑定服务端的 Service 来进行交互。...

2022-01-07 20:30:00 32156 11

原创 Android 如何获取传感器的数据

传感器 Sensor 是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。Android 提供了对设备传感器的支持,只要 Android 设备的硬件提供了这些传感器,Android 应用可以通过传感器来获取设备的外界条件,包括手机的运行状态、当前摆放的方向等。Android 系统还提供了驱动程序去管理这些传感器硬件,可以通过监听器的方式监听传感器硬件感知到的外部环境的变化。...

2021-08-24 15:38:15 24603 18

原创 sudo: command not found 的解决方法

sudo 是 Linux 系统管理指令,是允许系统管理员让普通用户执行一些或者全部的 root 命令的一个工具。在 Linux 系统中,使用 sudo 命令时如果提示 "command not found",我们应该如何解决呢?

2020-10-24 02:19:17 273540 63

原创 NDK 入门指南

NDK 即 Native Development Kit,是 Android 中的一个开发工具包,使您能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库,您可使用这些平台库管理原生 Activity 和访问物理设备组件,例如传感器和触摸输入。NDK 是我们实现 Java 与 Native 进行交互的一种方式。......

2020-09-24 22:31:33 7215 1

原创 Android Binder 通信一次拷贝的原理

对于 Android 开发者来说 Binder 应该不会陌生了,Binder 是 Android 提供的 IPC 通信机制,它是通过内存映射实现的,而这也是 Binder 相对于其他传统进程间通信方式的优点之一,即我们说的 Binder 只需要做“一次拷贝”,而其他传统方式需要“两次拷贝”!那么,这所谓的“一次拷贝”的实现原理到底是什么?

2022-12-13 10:36:59 2157 1

原创 为什么 Android 要采用 Binder 作为 IPC 机制?

通过 mmap,Binder 通信时,只需要经历一次数据复制,性能要优于管道、消息队列、socket等方式,在安全性,易用性方面又优于共享内存。鉴于上述原因,Android 选择了这种折中的 IPC 方式,来满足系统对稳定性、传输性能和安全性方面的要求。

2022-12-12 17:45:05 1177

原创 Gerrit 使用教程

Gerrit 是建立在 git 版本控制系统之上的,基于 web 的代码审核工具。Gerrit 是免费的,开源的,有一个可视化界面可供用户操作。主要解决的问题是代码审核。他在传统的源码工具管理协作流程中强制性引入代码审核机制,通过人工代码审核和自动化代码验证的方式,不符合要求的代码屏蔽在代码库之外,确保核心代码多人校验、多人互备和自动化构建核验。

2022-11-03 18:16:14 13051 3

原创 GitLab API 的使用教程

GitLab 作为一个开源、强大的分布式版本控制系统,已经成为互联网公司、软件开发公司的主流版本管理工具。使用过 GitLab 的都知道,想要提交一段代码,可以通过 git push 提交到远程仓库,也可以直接在 GitLab 平台上修改提交。然而上述两种提交方式都是人工提交代码,其实,GitLab 提供了一套完整的 API,让第三方平台可以通过 API 自动创建帐号、自动提交代码、自动拉分支,等等。API 涉及到的功能非常全面,基本上人工可以做的所有操作,都可以通过 API 自动实现。

2022-10-24 15:02:51 12785 8

原创 SurfaceView 与 TextureView 详解

播放视频或者渲染其他的动画的时候,有两个 View 组件可供选择,SurfaceView 和 TextureView。在 Android 7.0 上系统 Surfaceview 的性能比 TextureView 更有优势,支持对象的内容位置和包含的应用内容同步更新,平移、缩放不会产生黑边。 在7.0以下系统如果使用场景有动画效果,可以选择性使用TextureView。

2022-10-24 10:00:00 7773

原创 Android 基于共享内存实现跨进程大数据的高效传输

Android 基于共享内存实现跨进程大数据的高效传输。目前有很多智能设备采用了Android系统,对Camera,图形渲染都有很多不同于手机App的需求,在没有很好的跨进程传输方案的情况,有些项目只能把很多业务功能杂糅在一个App进程中,使模块承载的业务功能不是很清晰,有了这种方案,可以更加优化项目模型架构的设计。

2022-09-22 20:00:00 3933 2

原创 RubyMine 安装教程

RubyMine 是一个为 Ruby 和 Rails 开发者准备的 IDE,其带有所有开发者必须的功能,并将之紧密集成于便捷的开发环境中,号称最智能的 Ruby 和 Rails 的 IDE,能够大大增加 Ruby 和 Rails 开发者的开发效率。

2022-08-31 18:16:40 1099 1

原创 Linux 系统之 CentOS 和 Ubuntu 的区别

Linux 有非常多的发行版本,从性质上划分,大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本。商业版本以 Redhat 为代表,开源社区版本则以 Debian 为代表。这些版本各有不同的特点,在不同的应用领域发挥着不同的作用,不能一概而论。而绝大多数 VPS(Virtual Private Server 虚拟专用服务器)上只提供开源社区维护的发行版本。下面就这些不同的 Linux 发行版进行简单的分析。...

2022-08-29 12:47:27 16731 3

原创 RAW、RGB、YUV 图像格式区别

RAW 图像就是图像感应器将捕捉到的光源信号转化为数字信号的原始数据,是无损的,包含了物体原始的颜色信息等。RGB 就是一种在数字化领域表示颜色的标准,也称作一种色彩空间,通过用三原色 R、G、B 的不同的亮度值组合来表示某一种具体的颜色。YUV 是一种色彩编码方法,Y 表示明亮度(Luma),就是灰度图。U 和 V 分别对应 Cb(蓝色色度分量) 和 Cr(红色色度分量),代表色度(Choma),作用是描述影像色彩及饱和度,用于指定像素的颜色。......

2022-08-07 19:00:00 6434

原创 Java NIO 简介与使用

Java NIO(New IO) 是从 Java 1.4 版本开始引入的一个新的 IO API,可以替代标准的 Java IO API。Java NIO 由以下几个核心部分组成:Channels、Selectors、Buffers。

2022-08-06 19:00:00 406

原创 Camera1 源码解析系列(五)—— Camera1 takePicture() 流程解析

前面几篇文章已经把 Camera 控制流的部分梳理得比较清楚了。在 Camera 流程中,还有一个重要的部分,即数据流。Camera API 1 中,数据流主要是通过函数回调的方式,依照从下往上的方向,逐层 return 到 Applications 中。本篇将数据流与 Camera 的控制流结合起来,从 takePicture() 方法切入,追踪一个比较完整的 Camera 流程。.........

2022-08-05 21:00:00 1356

原创 Camera1 源码解析系列(四)—— Camera1 startPreview() 流程解析

上一篇关于分析了 `hw_get_module()` 的调用逻辑,本篇通过追踪 `Camera.startPreview()` 方法,以加深对控制流的理解。

2022-08-04 11:02:50 546

原创 Camera1 源码解析系列(三)—— Camera1 hw_get_module() 解析

这一章,我们将从 `hw_get_module()` 函数入手,去探究 `Libraries` 层是如何调用 `HAL` 层的库中的函数的。`CameraService` 是在开机时就会启动的,而当它第一次启动时,就会调用一个名为 `onFirstRef()` 的成员函数,我们所要探究的内容就是从这里开始的。.........

2022-08-03 10:00:38 595

原创 Camera1 源码解析系列(二)—— Camera1 Open() 流程解析

这一章里,我们将 `Camera.java` 中的 `open()` 方法作为切入点,按照 `Framework -> Android Runtime -> C/C++ Libraries -> HAL` 的顺序去分析整个调用流程。

2022-08-02 09:59:05 745

原创 Camera1 源码解析系列(一)—— Camera1 基本架构

虽然 Android5.0 开始弃用 Camera API1,但是各个手机厂商对 Camera API2 的支持是一个渐进式的过程,所以淘汰周期是比较长的,在很多高版本中使用 Camera API1 也是很常见的情况。

2022-08-01 15:59:20 920

原创 Android AudioEffect 音效方案

Android2.3 增加了对音频混响的支持,通过 AudioEffect 可以方便地对 AudioTrack 和 MediaPlayer 播放的音乐进行音效控制。Android 9.0 新增了用于 DynamicsProcessing 的 AudioEffect API,使用此类,我们可以构建基于通道的音频效果,包括各种类型的多个阶段,包括均衡,多频段压缩和限制。频段和活动阶段的数量是可配置的,并且大多数参数可以实时控制,例如增益、启动/释放时间、阈值等。......

2022-06-17 10:08:37 5309

原创 EQ 均衡器介绍

EQ 的全称是 Equalizer,EQ 是 Equalizer 的前两个字母,中文名字叫做“均衡器”。为什么叫它均衡呢,因为 EQ 之所以被发明出来,最早是用来提升电话信号在长距离的传输中损失的高频,由此得到一个各频带相对平衡的结果,所以叫它“均衡器”,它让各个频带的声音得到了均衡。......

2022-06-15 13:53:04 8371

原创 Android 进程间通信

IPC(Inter-Process Communication)为进程间通信或跨进程通信,是指两个进程之间进行间通信的过程。在Android 中,为每个进程都分配了一个独立的虚拟机,不同虚拟机在内存分配上都有不同的地址空间,互相访问数据需要借助其他手段。......

2022-01-08 18:00:00 6195 2

原创 H264 编码基本原理

H.264,同时也是 MPEG-4 第十部分,是由 ITU-T 视频编码专家组(VCEG)和 ISO/IEC 动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。这个标准通常被称之为 H.264/AVC(或者 AVC/H.264 或者 H.264/MPEG-4 AVC 或 MPEG-4/H.264 AVC)。是一种面向块,基于运动补偿的视频编码标准。...

2022-01-06 20:00:00 8061 6

原创 OpenPose 安装和使用教程

OpenPose 人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络和监督学习并以 caffe 为框架开发的开源库。可以实现人体动作、面部表情、手指运动等姿态估计。适用于单人和多人,具有极好的鲁棒性。是世界上首个基于深度学习的实时多人二维姿态估计应用,基于它的实例如雨后春笋般涌现。人体姿态估计技术在体育健身、动作采集、3D试衣、舆情监测等领域具有广阔的应用前景,人们更加熟悉的应用就是抖音尬舞机。......

2022-01-05 20:30:00 21376 35

原创 Windows 程序启动在指定屏幕

Windows 多屏情况下,EnumDisplayMonitors() 枚举所有显示器,通过 GetMonitorInfo() 可以取得指定显示器的相关信息,如物理显示区大小等。MonitorInfo 结构中保存着相应显示器的相关信息,如坐标、是否为主显示器等。该结构体中有个 dwFlags 变量表示该显示器是否为主显示器,当值为 MONITORINFOF_PRIMARY 时就说明是主显示器,根据这个值就可以区分主显示器和副显示器。......

2022-01-04 21:00:00 4074

原创 Unity Canvas Scaler 组件的使用

Canvas Scaler 这个组件用来做整体 UI 屏幕适配的。为什么是整体适配?因为适配时还会用到 RectTransform 中的 Anchor 属性。Canvas Scaler 的缩放模式与 Canvas 的渲染模式相关:当 Canvans 渲染模式为 Screen Space - Overlay 和 Screen Space - Camera 时,缩放模式有三种;当 Canvans 渲染模式为 World Space 时,缩放模式只有一种。...

2022-01-03 20:00:00 2980

原创 Unity 渲染原理

渲染流程应用程序阶段(CPU):识别出潜在可视的网格实例,并把他们及其材质提交给 GPU 以供渲染。几何阶段(GPU):进行顶点变换等计算,并将三角形转换到齐次空间并进行裁剪。光栅化阶段(GPU):把三角形转换为片元,并对片元执行着色。片元经过多种测试(深度测试,Alpha 测试等)之后,最终与帧缓冲混合。...

2021-11-22 21:00:00 9273 1

原创 Unity 射线碰撞检测

射线是在三维世界中从一个点沿一个方向发射的一条无限长的线。在射线的轨迹上,一旦与添加了碰撞器的模型发生碰撞,将停止发射。射线碰撞检测,就是由某一物体发射出一道射线,射线碰撞到物体之后,可以得到该物体的相关信息,然后就可以对该物体进行一些操作了。...

2021-11-05 20:00:00 8810

原创 Android 蓝牙手柄开发

有些手游是支持手柄操作的,通过连接蓝牙手柄,可以极大的提升游戏的用户体验,Android 中提供了用于检测和处理来自蓝牙手柄的用户输入的 API。

2021-10-29 11:40:54 8485 4

原创 Android 双屏异显

日常生活中,有时候会遇到 Android 设备连接两个屏幕进行显示的问题,比如酒店登记信息时,一个屏幕用于员工操作,一个屏幕显示相关信息供顾客查看。这里就涉及到 Android 的双屏异显的问题,实现 Android 的双屏异显,Google 也提供了相应的 API 方法 Presentation。......

2021-10-14 20:13:35 9985 5

原创 Android 内存泄露分析

内存泄漏是指内存空间使用完毕后无法被释放的现象。尽管Java有垃圾回收机制(GC),但是对于还保持着引用,逻辑上却已经不会再用到的对象,垃圾回收器不会回收它们。用户对单次的内存泄漏并没有什么感知,但当可用的空闲空间越来越少,GC就会更容易被触发,GC进行时会停止其他线程的工作,因此有可能会造成界面卡顿等情况。后续需要分配内存的时候,很容易导致内存空间不足而出现 OOM(内存溢出)。...

2021-09-03 14:33:30 3949 2

原创 Android 内存泄漏检测工具 LeakCanary 的使用

LeakCanary 是 Square 公司为 Android 开发者提供的一个自动检测内存泄漏的工具,LeakCanary 本质上是一个基于 MAT 进行 Android 应用程序内存泄漏自动化检测的的开源工具,我们可以通过集成 LeakCanary 提供的 jar 包到自己的工程中,一旦检测到内存泄漏,LeakCanary 就会 dump Memory 信息,并通过另一个进程分析内存泄漏的信息并展示出来,随时发现和定位内存泄漏问题,极大地方便了Android应用程序的开发。...

2021-09-03 11:49:56 14381 1

原创 Android Studio Memory Profile 的使用

Memory Profiler 是 Android Profiler 中的一个组件,它可以帮助你识别内存泄漏和内存溢出,从而导致存根、冻结甚至应用程序崩溃。它显示了应用程序内存使用的实时图,让你捕获堆转储、强制垃圾收集和跟踪内存分配。......

2021-09-02 21:05:47 4935 2

原创 Git 从已有分支拉出新分支

Git 的分支是为了将修改记录的整体流程分叉保存。开发中,经常需要从一个已有的分支拉出一个新分支,在这个新分支做一些开发,这里示例为:从 master 分支,重新拉取出一个新的分支,名字为 dev。......

2021-08-23 11:42:11 14130 1

原创 如何解决 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader

在 ndk 项目中,运行时出现 crash,当报错信息为:java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file ]]] couldn't find "xxx.so"时,是因为so文件加载异常。

2021-04-28 21:29:44 9585

原创 音频开发入门知识

时至今日,短视频 App 可谓是如日中天,一片兴兴向荣。随着短视频的兴起,音视频开发也越来越受到重视。今天就来介绍下音频相关的基础知识。

2020-11-20 20:12:55 3952

原创 NDK 开发之 JNI 方法静态注册与动态注册

上文说到,进行 NDK 开发的时候,我们首先需要把 Java 方法声明为 native,然后编写对应的 C/C++ 代码,并编译成为动态链接库,在调用 Java 方法前加载动态链接库即可调用。那么,Java 层中的方法是如何与 native 层的函数一一对应的呢?这里有两种方法:静态注册、动态注册。下面进行详细介绍。......

2020-10-30 22:09:59 1775 2

原创 NDK 开发之 ndk-build 的使用

dk-build 本质上是一个脚本,它的位置就在 NDK 目录的最上层,即在< NDK >/ndk-build 路径下。运行 ndk-build 脚本相当于运行以下命令:$GNUMAKE -f <ndk>/build/core/build-local.mk<parameters>$GNUMAKE 指向 GNU Make 3.81 或更高版本, 则指向 NDK 安装目录。......

2020-09-29 21:53:26 15434 2

原创 NDK 开发之 CMake 的使用

CMake 是一个开源的跨平台自动化构建系统。之前做 NDK 开发或者老的项目都是基于 Android.mk、Application.mk 来构建项目的,但从 AS 2.2 之后便开始采用 CMake 的方式来构建 C/C++ 项目,采用 CMake 相比与之前的 Android.mk、Application.mk 方便简单了许多。......

2020-09-28 22:49:10 2959 3

原创 如何接入Unity Ads?

Unity官方提供的广告插件Unity Ads总体来说还是很方便的,目前只支持Android和iOS的广告,而且官方已经处理好了unity和Android或者iOS的调用,所以根本不需要再为平台编写中间件进行交互。

2019-02-26 15:31:58 7078 1

RubyMine 安装工具 jetbra.zip

RubyMine 安装工具,内含 Activation code,解压缩密码:jetbra。RubyMine 是一个为 Ruby 和 Rails 开发者准备的 IDE,其带有所有开发者必须的功能,并将之紧密集成于便捷的开发环境中,号称最智能的 Ruby 和 Rails 的 IDE,能够大大增加 Ruby 和 Rails 开发者的开发效率。使用教程:https://blog.csdn.net/hello_1995/article/details/126627478

2022-09-23

Android camera-ipc-sample.zip

Android 基于共享内存实现 Camera 跨进程大数据的高效传输。该工程包含两个App:MultiCameraService、MultiCameraClient。安装这两个 Apk,手动给 MultiCameraService App 授予 Camera 访问权限,然后打开 MultiCameraClient App,点击预览开关按钮,正常情况下即可实现 Camera 预览。 目前有很多智能设备采用了Android系统,对Camera,图形渲染都有很多不同于手机App的需求,在没有很好的跨进程传输方案的情况,有些项目只能把很多业务功能杂糅在一个App进程中,使模块承载的业务功能不是很清晰,有了这种方案,可以更加优化项目模型架构的设计。

2022-09-21

Android dynamics-processing-sample.zip

Android DynamicsProcessing 示例程序。Android 9.0新增了用于 DynamicsProcessing 的 AudioEffect API,使用此类,我们可以构建基于通道的音频效果,包括各种类型的多个阶段,包括均衡,多频段压缩和限制。频段和活动阶段的数量是可配置的,并且大多数参数可以实时控制,例如增益、启动/释放时间、阈值等。

2022-09-20

Android aidl-sample.zip

AIDL(Android Interface Definition Language)示例程序,实现了在 Android 上的进程间通信(IPC),包含客户端和服务端代码。

2021-12-22

Android game-controller.zip

用于检测和处理来自蓝牙手柄的用户输入事件的 Android 示例。

2021-10-29

Android presentation-sample.zip

日常生活中,有时候会遇到 Android 设备连接两个屏幕进行显示的问题,比如酒店登记信息时,一个屏幕用于员工操作,一个屏幕显示相关信息供顾客查看。这里就涉及到 Android 的双屏异显的问题,该示例就实现了这样的功能,主屏和副屏之间可以进行交互。

2021-10-13

Android sensor-sample.zip

Android 获取传感器数据的示例程序。

2021-08-24

Android 悬浮窗工具 CleanFloat

这是一个 Android 自定义水波球清理内存的悬浮窗小工具,通过悬浮窗可以打开清理内存的界面,有自定义的动态水波球和一些常用功能的开关。

2016-10-31

空空如也

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

TA关注的人

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