- 博客(75)
- 收藏
- 关注
原创 Android 12 S 自定义Native服务selinux权限添加
节点在此目录添加定义:genfs_contexts。并且与system_server互相通信。native服务访问hal服务。
2023-06-13 17:32:14 1234
原创 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-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
原创 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
原创 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关注的人