自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android 12 S 自定义Native服务selinux权限添加

节点在此目录添加定义:genfs_contexts。并且与system_server互相通信。native服务访问hal服务。

2023-06-13 17:32:14 1234

原创 Android 12 S 自定义Hal服务selinux权限添加

如果遇到如下错误,应该是漏了添加。自定义hal服务添加可参考。

2023-06-13 17:08:41 2651 6

原创 Android 12 S HIDL Service创建流程

HIDL 这个机制的目的,主要是为了把框架(framework)与 HAL 进行隔离,使得框架部分可以直接被覆盖、更新,而不需要重新对 HAL 进行编译。HAL 的部分将会放在设备的 /vendor 分区中,并且是由设备供应商(vendors)或 SOC 制造商来构建。这使得框架部分可以通过 OTA 方式更新,同时不需要重新编译 HAL。这种设计被称为Treble机制,从Android 8.0引入。

2023-04-28 17:47:06 5055 6

原创 Android 12 S Native Service的创建流程

其中需注意的是IInterface中的纯虚方法,在Bn和Bp去实现的时候,要一模一样。include/CustomizeManagerService.h中新增如下内容。CustomizeManagerService.cpp中新增如下内容。在customize下新增目录include用于存放头文件。新增目录名:customize。

2023-04-23 15:53:22 1569 14

原创 Android 12 S ServiceManager原理

​ServiceManager是Binder通信的核心部分,提供服务注册以及查询的功能。在 Android 11 之前的版本里,它是直接使用 open、mmap、ioctl 等 api 与 binder 驱动交互。而从 Android 11 开始,ServiceManager放弃使用这些较底层的接口,转向 libbinder 库和 AIDL。

2023-04-23 14:26:07 3621 11

原创 Android Studio中断点调试

由于我们一般调试的是frameworks/base/core和frameworks/base/services目录,故我们只保留此文件中sourceFolder关于这两个目录相关的,其他的全部删除,并将其他所有用不到的都放到excludeFolder中,这将大大减少我们的索引时间,但我测试,也要很久,需要再进行下一步。此外我们还要将 此文件中下部分中的orderEntry删除,这里也会大大减少系统索引时间,这个和上面的sourceFolder都会将Android Studio的索引时间大大拉长。

2024-09-29 10:03:41 370

原创 Android12上新增jar遇到的问题总结

2的结果就是不会有单独的jar生成到out下的system/framework下,只会有中间编译产物的jar生成,但由于这个也满足我的需求,就用这个方式了。2. 在framework/base/service下创建目录,将我的jar移动到这下面,参考其他bp的写法,如下所示,就可以编译成功了。1. 将我这个jar目录移动到framework/base/service下,也是同样的报错,且我未修改我的任何代码。最近在vendor目录下新增jar遇到一个问题。

2024-09-04 21:36:56 842

原创 Android 14 Power键亮灭屏流程

查找代码会发现InputManagerCallback实现了WindowManagerCallbacks,然后就到了InputManagerCallback这里。mWindowManagerCallbacks定义如上,我们可以看到WindowManagerCallbacks只是一个接口,没有具体的实现。当用户点击物理按键Power键时,input模块会分发此事件。然后就走到了PhoneWindowManager中。

2024-08-07 22:58:15 924

原创 Android14 WMS-窗口绘制之relayoutWindow流程(二)-Server端

本文接着如下文章往下讲然后就到了Server端WMS的核心实现方法relayoutWindow里。

2024-06-06 13:05:15 1554 1

原创 Android14 WMS-窗口绘制之relayoutWindow流程(一)-Client端

经过上述两个流程后,窗口的信息都已经传入了WMS端。

2024-06-04 18:16:49 1125

原创 Android14 WMS-Power键短按流程

WMS中事件分发从。

2024-06-04 18:15:00 896

原创 Android14 WMS-IWindowSession介绍

上述代码中,在第一步中,通过getWindowManagerService方法获取了server端binder对象,即获取了WMS服务, 看代码是单例模式,可以看出来这个sWindowSession是一个单例,也就是一。IWindowSession客户端是应用,服务端是WMS和Session。然后在WMS中new了一个Session,Session实例化相关如下。来看看WMS,其实也是继承了 IWindowSession.Stub。客户端通过IWindowSession向WMS发送请求,

2024-06-03 17:57:54 810 1

原创 Android14 WMS-窗口添加流程(二)-Server端

Android14 WMS-窗口添加流程(一)-Client端-CSDN博客本文接着上文"Android14 WMS-窗口添加流程(一)-Client端"往下讲。也就是WindowManagerService#addWindow流程。目录一. WindowManagerService#addWindow标志1:mPolicy.checkAddPermission标志2:getDisplayContentOrCreate标志3: mWindowMap二:窗口类型检查三:新建WindowToken标志1 Win

2024-06-03 17:57:45 1170 3

原创 Android14 WMS-IWindow介绍

IWindow是怎么赋值并一步步传入WMS端的呢,由下面代码可以看出,它是在ViewRootImpl中进行赋值的。,当窗口有一些改变时,WMS及时调用客户端接口,让客户端窗口立即更新。IWindow是很重要的,官方介绍是A。

2024-05-28 18:16:34 619

原创 Android14 WMS-窗口添加流程(一)-Client端

窗口布局在onCreate方法中通过setContentView(R.layout.xxx)加载,但窗口的显示并不是在wm_on_create_called中, 而是在wm_on_resume_called后,这个在后面会讲解到。

2024-05-28 15:10:24 1076

原创 Android中C++如何读写json文件

3. 向json文件写入数据。4. 读取json文件内容。

2024-05-11 17:35:39 452

原创 C++ 如何创建线程

C++中可使用pthread_t来创建线程,pthread_t是 POSIX 线程库中的数据类型,用于表示线程的标识符。它通常用于创建、管理和操作线程。在 C 或 C++ 中,你可以使用 pthread_t类型的变量来表示一个线程。头文件:以下具体介绍一下每个方法。

2024-04-26 10:59:32 1109

原创 Android Studio修改“choose boot runtime for the IDE“后无法打开

在Android Studio中选择了"choose boot runtime for the IDE"的New后,会自动重启AS,然后就无法打开android studio了,打开直接报错,cause by如下。D:\Users\用户名\AppData\Roaming\Google\AndroidStudio(版本号)删除如下路径的文件即可,会重新走一遍AS的首次打开教程。

2024-04-23 13:30:43 1437 3

原创 最新Android Studio导入jar,aar包的方法

但是这样都无法sync以及编译通过,因为方式已经变了,现在只需要按照如下方式修改即可。2:在MyApplication\app\build.gradle下添加。1:将aar文件复制到MyApplication\app\libs下。

2024-04-11 14:19:55 1668

原创 Permission Denial: package=android does not belong to uid=2000

02-01 03:14:17.230 1685 2701 W ContextImpl: Calling a method in the system process without a qualified user: xxxxxxxxx02-01 03:14:17.231 1685 2701 W ActivityTaskManager: Permission Denial: package=android does not belong to uid=2000

2024-04-01 10:48:07 830 1

原创 Android Selinux详解[九]--sepolicy编译生成产物介绍

如果在keystore2_key_contexts中新增标签,可以在此处查看自己新增的标签。如果在hwservice_contexts中新增标签,可以在此处查看自己新增的标签。如果在property_contexts中新增标签,可以在此处查看自己新增的标签。如果在service_contexts中新增标签,可以在此处查看自己新增的标签。如果在seapp_contexts中新增标签,可以在此处查看自己新增的标签。如果在file_contexts中新增标签,可以在此处查看自己新增的标签。

2024-03-28 14:46:55 918

原创 Android Selinux详解[八]--常用sepolicy函数和权限组说明

Selinux中有很多函数,比如domain_auto_trans, r_dir_file等等,可以见源码中定义的地方举例一两个看一下。

2024-03-28 11:18:45 1504

原创 C++ ostringstream用法详解

std::ostringstream 是 C++ 标准库中的一个输出字符串流类,它可以用于将各种数据类型转换为字符串,并且支持格式控制和字符串拼接操作。

2024-03-21 14:48:39 2681

原创 C++ istringstream用法详解

可以使用 std::setprecision、std::fixed、std::scientific 等控制符来设置提取浮点数时的精度和格式。使用 >> 操作符可以从 std::istringstream 中提取数据,就像从 std::cin 中读取数据一样。可以使用 good()、eof()、fail()、bad() 等函数来检查流的状态,以确保数据提取的正确性。在提取数据后,通常可以通过检查 std::istringstream 的状态来确保数据提取成功。

2024-03-21 14:33:56 5417

原创 Android Selinux详解[七]--如何给可执行程序bin加标签

经过前面几篇文章的介绍,你应该对Selinux有一定的了解了,现在我们就来实战一下。你可能会在工作的过程遇到要给可执行程序bin加标签的需求,以下来讲解一下怎么给bin加标签。

2024-03-20 16:23:13 595

原创 Android Selinux详解[六]--新增属性标签相关

3. 以system_server为例,因为它本身对system_prop的属性有set权限,如果需要在systemserver中新增属性的话,可以以sys.开头,或者以persist.sys.开头,都不用再去新增对应的权限了。1. 对于没有在property_contexts中定义的属性,默认标签为default_prop。2. 以下这种代表以sys.开头的属性标签都为system_prop,其他的也都是一样的。属性有很多种命名方法,但对应的标签页不同,安卓原生的一个属性标签可以参考。

2024-03-18 16:52:30 1660

原创 Android Selinux详解[五]--新增hal服务标签相关

在sepolicy/public/service.te中还有一个neverallow,此neverallow意思为不允许domain对非hwservice_manager_type的hal service进行add find权限。在工作过程中,SElinux常用的有以下几个文件可用于新增标签。hwservice在源码中可以看看,主要有如下几种声明类型。

2024-03-13 16:39:24 613

原创 Android Selinux详解[四]--新增服务标签相关

system server创建的service,如果是新增的java层系统服务,并且由system server拉起,则基本都是如下声明。带有app_api_service的声明说明除了isolated apps外,其他APP都可以访问的。带有system_api_service的说明只有system api的服务。所以经过上述解释,是否对服务该怎样进行type有一定的了解了呢。service有以下几种声明,相应解释如下。可以看到,有如下几种标签声明。

2024-03-13 15:59:48 1017

原创 Android Selinux详解[三]--新增设备节点标签相关

上个章节说了在file_context中也可以新增节点,但可能会出现标签无法生效的情况,这种情况下就需要在genfs_contexts中去新增设备节点相关的标签了,因为在genfs_contexts中打的标签,系统会自动执行restorecon命令,而在file_contexts中新增设备节点标签,是需要代码或者手动执行restorecon命令才会生效的。

2024-03-11 15:13:44 1397

原创 Android Selinux详解[二]--新增文件标签相关

在工作过程中,SElinux常用的有以下几个文件可用于新增标签restorecon在Selinux中是一个非常常用的命令,其解释如下"restorecon" 是一个用于恢复文件或目录的 SELinux 安全上下文的命令。在使用 SELinux(Security-Enhanced Linux)时,每个文件和目录都有一个安全上下文,它描述了文件或目录的安全属性和访问权限。如果由于某种原因安全上下文发生了改变,例如文件被移动或复制,可能导致安全上下文不一致。

2024-03-07 16:43:42 2075

原创 Android Selinux详解[一]---整体介绍

Android 使用安全增强型 Linux (SELinux) 对所有进程强制执行强制访问控制 (MAC),甚至包括以 Root/超级用户权限运行的进程(Linux 功能)。借助 SELinux,Android 可以更好地保护和限制系统服务、控制对应用数据和系统日志的访问、降低恶意软件的影响,并保护用户免遭移动设备上的代码可能存在的缺陷的影响。ELinux 按照默认拒绝的原则运行:任何未经明确允许的行为都会被拒绝。下面大概介绍一下工作中经常遇到的Selinux相关知识。

2024-03-07 14:21:03 2386

原创 Android中 在目录下创建文件涉及到的权限问题分析

Android中读写目录涉及到的权限一般有三个,一个是selinux, 另一个是用户组, 还有一个是目录本身权限问题,本文章针对这三点做详细解析。

2024-03-05 17:03:17 1605

原创 C++ static_cast基本用法

static_cast 是 C++ 中的一种类型转换操作符,用于执行编译时类型转换。它可以在一定程度上实现隐式类型转换,但是相较于 C 风格的强制转换,static_cast 在类型安全性和可读性上更有优势。

2024-02-28 13:48:19 712

原创 C++中epoll用法总结

epoll能显著的提高程序的CPU利用率。本文中代码是源码中healthd中的ueventfd的epoll监听代码。

2024-02-19 13:53:00 1418

原创 C++层uevent获取

本文用的是#include 主要讲述android中怎么在C++层接收uevent。首先创建一个线程用于循环去获取uevent。然后在这个线程中就可循环获取uevent了。

2024-02-01 19:35:30 327

原创 C++ stat函数用法

/time of lastaccess 文件最近一次被存取或被执行的时间, 一般只有在用mknod、 utime、read、write 与tructate 时改变.time_t st_mtime;//time of last change i-node 最近一次被更改的时间, 此参数会在文件所有者、组、 权限被更改时更新。//blocksize for filesystem I/O 文件系统的I/O 缓冲区大小.dev_t st_rdev;

2024-01-31 18:09:52 820

原创 signal 7 (SIGBUS), code 1 (BUS_ADRALN)/ signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) 报错解决

根因是类是继承RefBase的,使用的是sp智能指针,智能指针会自己管理内存,而我用的是Amessage,AHandler,在AHandler中的onMessageReceived中会在处理完消息后,会清除所有占用的内存空间,这个就与智能指针的清理产生冲突。导致发生native crash。遇到问题时,会出现以上三个问题,每次出现问题的。

2024-01-29 14:34:37 709

原创 C++如何在文件的倒数第二行末尾插入数据

【代码】C++如何在文件的倒数第二行末尾插入数据。

2024-01-26 18:24:08 294

原创 Android中C++层fstream用法详解

ios::trunc   = 0x10, // 在读写前先将文件长度截断为0(默认)ios::nocreate = 0x20, //文件不存在时产生错误,常和in或app联合使用ios::noreplace = 0x40, //文件存在时产生错误,常和out联合使用ios::binary  = 0x80  //二进制格式文件。

2024-01-26 18:21:27 1757

原创 Amessage的clear会清除对象并释放内存空间

然后在onMessageReceived方法中接收这个message,然后执行list.clear()清除这个操作,clear时发现会将DataStructure之前new出来的所有对象都清除,并释放内存空间。其中DateStructure是一个继承Refbase的类。然后将这个list通过Amessage发送。然后往list中添加数据。

2024-01-11 09:53:34 525

空空如也

空空如也

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

TA关注的人

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