自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 OpenXR 超详细的spec-Chapter 5 System介绍

稍后更新,敬请期待。

2024-03-11 23:27:59 142

原创 OpenXR 超详细spec--Chapter 2 基本原理

An OpenXR runtime是实现OpenXR API的软件。一个系统中可能安装不止一个openXR runtime,但是在任何时间只有一个runtime是active。

2024-03-11 23:22:45 468

原创 OpenXR 超详细的spec--Chapter 1 Introduce

OpenXR是XR应用的一个API,它是app与runtime进程内或者进程外的接口。Runtime可以处理类似frame composition,外围设备管理、原始tracking information的功能。Optionally, Runtime可以支持device layer plugins,允许通过共同定义的接口访问各种硬件。

2024-03-11 23:15:05 301

原创 OpenXR 超详细的spec--Chapter 3 API初始化介绍

xrGetInstanceProcAddr的参数instance和name不同,返回的值也是不同,参考下表。instance: XrInstance类型,可以是NULL,也可以是任何有效的instance;function:返回的函数指针fp。name:待获取fp的函数名称;

2024-03-03 15:32:04 489

原创 OpenXR 超详细的spec--Chapter 4 Instance介绍

instance: XrInstance类型,可以是NULL,也可以是任何有效的instance;name:待获取fp的函数名称;function:返回的函数指针fp。xrGetInstanceProcAddr的参数instance和name不同,返回的值也是不同,参考下表。

2024-03-02 13:07:11 796

原创 Android Studio中使用cmake开发JNI实战

Android Studio中使用cmake开发JNI实战

2023-08-05 16:24:02 1229

原创 JNI编程入门(一)

JNI(Java Native Interface),主要是为了实现Java和C/C++代码之间相互调用,它相当于Java层和C/C++层的桥梁。如下图所示。通常我们都是在Java中调用C/C++的方法,这样可以实现Java层访问底层硬件或者直接调用现有的C++ 库。但在使用JNI的时候要非常细心,它的错误很难追踪和调试,它的局部引用和全局引用,稍微使用不当就会crash。

2023-07-15 22:50:49 398 2

原创 Android Studio直接install系统签名的apk到设备

1.给apk系统签名的方法2.Android Studio直接运行带系统签名的apk。

2023-06-26 19:13:12 414

原创 PackageManagerService的启动过程——Android 12(一)

PackageManagerService(简称PKMS)的官方解释:随时随地跟踪所有的APKs。主要职责分为:启动过程中扫描App所有安装目录,解析其中的Apk将相关信息加载到PKMS的数据结构中,同时同步到/data/system/packages.xml中;注册APK信息和其四大组件到PKMS中。负责App的安装和卸载。对外提供接口查询App相关信息。

2023-05-25 13:37:25 693

原创 Android 12 framework API规则和编译

在Framework层使用enum会报错:Enums are discouraged in Android APIs [Enum],因此一般都用@intDef代替,使用新的注解表示。当只有一个回调方法且永远不会有其他回调方法时使用Listener,且注册监听和解注册监听的方法必须是add/remove开头,否则Android Lint编译不过。如果上述注册方法没有在明确的线程中时,则需要在注册的时候包含Executor参数,如果不加的话,默认在主线程中回调。表示返回值、参数或者field可以是null。

2023-05-24 20:09:59 1725

原创 ActivityManagerService启动Launcher过程详解——Android 12(四)

前边介绍了AMS和ATMS startService()的启动过程、setSystemProcess()阶段、installSystemProviders()阶段,本文介绍AMS.systemReady()的阶段,包含启动home activity的过程,home activity根据是否注册system uid来判断是启动Launch还是setup wizard。

2023-05-17 22:44:07 821

原创 系统服务Installer的启动——Android 12

PackageManagerService的中负责Application安装、卸载等工作,实际上是由Java层系统Intaller通过Binder调用native层的installd守护进程来实现的,而Installer与installd是通过AIDL进行通信的。因为SystemServer进程是以system用户运行,所以由它启动的系统服务包括PKMS都是以system用户运行,而创建关键目录如/data/user等需要root用户权限、dex文件的优化和转化等需要installd进程完成

2023-05-17 15:21:04 728

原创 ActivityManagerService安装SettingsProvider的过程详解—Android 12(三)

先介绍了SystemServer.startBootstrapServices()中AMS和ATMS启动相关业务,,接着介绍了startCoreServices()中AMS设置UsageStatsManagerInternal相关业务,本章介绍startOtherServices()中与AMS和ATMS相关的业务。

2023-05-17 09:34:27 242

原创 AMS中ActivityThread的生命周期

ActivityThread管理application进程中主线程的执行、调度,执行activities、broadcasts和activity manager请求的其他操作。AMS中持有的ActivityThread mSystemThead实际上是SystemServer进程的主线程。

2023-05-10 20:51:24 217

原创 LocalServices类详解——Android 12

LocalServices的解释:注册到LocalServices中的service不是Binder对象,只能在同一个进程中使用,除此之外它的的使用方式和ServiceManager相似。添加本地service时调用LocalServices.addService(Class type, T service),获取某个类型本地service的实例引用时调用LocalServices.getService(Class type)。某个类型的service在LocalServices中只有一个实例。

2023-05-10 16:04:11 418

原创 ActivityManagerService和ActivityTaskManagerService详解—Android 12(二)

接上一篇博客,介绍了SystemServer.starBootstrapServices()中启动AMS和ATMS所做的工作,这一节介绍在SystemServer.startCoreServices()中关于AMS和ATMS设置UsageStateManagerInternal服务来跟踪application使用状态的业务。

2023-05-10 14:31:30 511

原创 ActivityManagerService和ActivityTaskManagerService启动详解—Android 12(一)

ActivityManagerService太负责了,尤其是Android12的AMS没有相关文章,那我们就从它的启动开始分析源码,梳理ActivityManagerService、ActivityTaskManager、WindowManagerService等相关类的关系。

2023-05-09 18:02:38 2055 1

原创 Android启动过程--Kernel启动和init启动

BootLoader:它是在操作系统内核运行之前运行的一段小程序,初始化硬件设备、建立内存空间映射图,从而将OS拉起来。Linux Kernel:它启动后,设置缓存、计划列表、加载驱动,启动init进程。init:初始化和启动PropertyService,启动zygote和servicemanager进程。zygote:c++层:启动VM并为VM注册JNI方法,调用ZygoteInit进入Java层;Java层:预加载类、库等各种资源,创建服务器端Socket,启动systemserver进程。

2023-05-05 17:42:18 1455

原创 servicemanger的前世今生--Android 12

前边好几节介绍了Java层的SystemService类、ServiceManager类、SystemServiceManager类,以及SystemServer类中启动三大类服务的解析,我们知道启动系统服务时有的会调用SystemServiceManager.startService()或者ServiceManager.addService(),两者除了参数要求不一致外,都最终会调用IServiceManager.addService()中。

2023-05-01 23:36:19 1011

原创 Android系统启动--init启动zygote进程的过程--Android 12

Android设备的启动必须经历3个阶段,即Boot Loader、Linux Kernel和Android系统服务。init是Linux系统中用户空间的第一个进程,pid = 1。init进程将通过解析init.rc来启动其他关键的系统服务进程——zygote、systemserver、servicemanager。

2023-04-29 23:52:09 1114

原创 Android系统启动--Zygote启动system_server进程的过程--Android 12

上一篇博文介绍了SystemServer启动各种SystemService的过程,本章介绍Zygote孵化SystemServer进程的过程,system_server是进程名称,代码实现在 /frameworks/base/services/java/com/android/server/SystemServer.java。Zygote启动system_server进程基本都在framework Java层,本文基于Android 12,整体过程如下图。

2023-04-27 23:13:30 382

原创 Android Log和Slog类详解--Android 12

Log类的路径在/frameworks/base/core/java/android/util/Log.javaSlog类的路径在/frameworks/base/core/java/android/util/Slog.java。

2023-04-26 23:21:07 1445

原创 Android framework层SystemServer类详解

SystemServer类主要是启动系统服务的,系统服务分为三类:引导服务BootstrapServices,核心服务CoreServices,其他服务OtherServices。

2023-04-24 16:13:11 675

原创 Framework层ServiceManager类的详细介绍

SystemManager是/frameworks/base/core/java/android/os/ServiceManager.java。该类主要与native层的SystemManager.cpp通信交互。

2023-04-23 18:59:58 321

原创 Framework层SystemServiceManager类的详解

SystemServiceManager类是用来管理系统服务(SystemService)的创建、启动和其他生命周期事件的。

2023-04-23 15:27:27 484

原创 Framework层SystemService类的详细介绍

它是运行在系统进程中的service的基类,根据需要override和implement生命周期事件回调方法。SystemService的生命周期方法如下:下边的方法都是由system service的主线程调用。1.构造函数用来提供初始化系统service;调用该方法启动service。在onStart()中应该调用把该service公开,这样其他service或者apps可以访问到它。在收到PHASE_BOOT_COMPLETED的boot phase之前,该方法被调用的次数和引导阶段的次数一样多。

2023-04-21 15:41:26 479

原创 ArrayMap 源码的详细解析

ArrayMap是一个key-value的数据结构,它比HashMap有更高的内存效率。它映射到一个数组结构:一个整数数组保存key的hash code,一个保存key-value的对象数组。它可以避免为push到map的item创建额外的对象,而且它试图控制这些数组大小的增长(因为增长数据大小只需要复制数组中的item即可,不需要重建hash map)。它不适用于大量数据的存储,通常会比HashMap慢,因为查找需要二分法,而且添加和删除需要插入和删除数组中的entries。

2023-04-19 15:52:19 477

原创 Java常见知识点

Java相关知识点:反射机制、面向对象的多态、break、continue、return区别、final、finally、finalize区别、String、StringBuffer、StringBuilder的区别

2023-04-15 16:51:38 41

原创 Framework层添加SystemService和Manager的超详细步骤

本文适用于Android 12中增加系统服务。

2023-04-13 21:01:01 1771 4

原创 BLE 基础知识点

BLE、Mac Address、扫描机制、扫描参数

2023-04-11 17:20:06 1058

原创 Java中static、final、volatile关键字

Java的static、final、volatile关键字

2023-04-09 22:15:06 155

原创 Java的四种引用方式

Java的四大引用, 垃圾回收

2023-03-28 22:14:40 300

原创 AILD知识点汇总

android、HIDL、in、out、inout

2023-03-23 17:46:43 215

原创 c++ 数组、指针和引用

c++指针和引用学习

2022-12-26 23:44:46 153

原创 SLAM十四讲——Pnp求解之DLT

学习目标学习PnP求解相机位姿,学习PnP的求解之直接线性变换DLT目录PnP 直接线性变换DLT一、PnP1.PnP的概念PnP(Perspective-n-Point)是求解3D到2D点对运动的方法,它描述了已知n个3D空间点以及他们的投影位置时,估计相机的位姿。注意:3D点是世界坐标系下的坐标,而非相机坐标系下的坐标,可以选择以物体质心为空间坐标系的原点,其他点的坐标则是相对该质心的位置。而2D点是该3D点在图像中投影位置,即像素坐标。2.openCV...

2022-05-16 12:15:28 1841

原创 无线adb调试

1. windows配置adb环境由于笔记本配置受限空间不足,没有下载Android sdk,所以需要单独下载adb工具。好在google直接提供下载platform-tools安装,国内可以下载:windows下载地址:https://dl.google.com/android/repository/platform-tools-latest-windows.zip下载完成后直接解压到自己制定的目录,然后将解压的目录配置到环境变量path中即可。验证是否配置完成:启动cmd

2022-05-07 09:48:02 6421

原创 学习齐次坐标

学习目标:学习齐次坐标,理解为何SLAM中都是用齐次坐标表示学习内容:齐次坐标:将n维的向量用n+1维向量表示,我们常用在3维向量末尾添加1变成4维的齐次坐标。在齐次坐标中,某个点p的每个分量同乘以一个非0常数w,仍然表示3维空间中同一个点,如下所示:所以齐次坐标(Xc , Yc , Zc ,1)T 对应3维空间的点为(Xc , Yc , Zc)T 。引入齐次坐标的目的是合并矩阵运算中的加法和乘法。...

2022-05-06 14:44:06 513

原创 视觉SLAM十四讲——对极约束(2D-2D)笔记

学习目标:学习对极约束的原理,以及通过求解本质矩阵来估计相机的位姿。目录: 一、向量内积和外积二、对极约束的概念三、对极约束的公式推导 四、本质矩阵和基础矩阵五、八点法 一、向量内积和外积1.向量的内积:又称点积,描述的是向量间的投影关系。 向量a的行数=向量b的列数,则向量a和向量b的内积公式如下:𝑎·𝑏=𝑎1∗𝑏1+𝑎2∗𝑏2+….+𝑎𝑛∗𝑏𝑛=𝑎𝑏cos<𝑎,𝑏> ...

2022-05-05 17:34:12 1234 3

原创 Ubuntu下使用cmake运行c++程序

学习目标:对于上篇调研opencv处理照片的c++代码,学会如何在ubuntu下直接运行。学习内容:一、安装cmake二、建立cmake工程三、使用cmake运行代码一、安装cmake1.在ubantu18下安装cmakesudo apt install cmake二、建立cmake工程1、复制上篇opencv处理图片的代码,创建一个名为process_image.cpp复制到一个文件夹,例如opencv_learning中,在该目录下,创建CMakeLists.t

2022-05-02 23:00:16 4309 1

原创 openCV处理图片

学习目标:学习opencv常见的处理图片的函数,包含常规的读取、转灰度图、图像金字塔向上向下采样、高斯模糊、阈值操作、查找轮廓基本处理图像的操作,熟悉opencv的函数,后期便于识别自己想要图片中的元素,可以根据元素的几何特征过滤轮廓。直接上代码:#include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <

2022-04-29 16:39:25 281

空空如也

空空如也

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

TA关注的人

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