Android system
文章平均质量分 88
Android系统框架实现(framework)层,包含系统相关理论知识和实例修改
ʚ兔子的先森ɞ
一只立志于养老婆的程序猿。
展开
-
Android system — 链接器命名空间共享库配置方法(Android 11后)
native进程的so库是直接通过dlopen打开的,而其对应的命名空间也是直接通过linker进行判断的,并没有调用到libnativeloader.so,因此native进程的配置方式也与应用进程不同。中,我们提到了“目录-区段”映射属性dir.name,指向 [name] 区段所应用到的目录的路径,其实就是baseconfig.cc中定义的dirToSection。通过上面的代码跟踪我们会发现,其实在Android 11后,应用进程共享库的配置位置都在。中我们可以看到调用了。原创 2024-04-29 16:35:03 · 2010 阅读 · 3 评论 -
Android system — 链接器命名空间(linker namespace)源码分析
应用程序对应的可执行文件app_process会创建一个类加载器classloader并调用System.loadLibrary加载so库,最终会调用至android_dlopen_ext;而native的二进制bin文件是通过dlopen获取so库的handle,但是无论是dlopen还是android_dlopen_ext最后都是调用do_dlopen函数,所以从do_dlopen开始分析。android_namespace_link_t::is_accessible()进行权限判断。原创 2024-04-28 17:37:50 · 1479 阅读 · 0 评论 -
Android system — Android链接器命名空间(Android 11后)
android 7.0加入了对私有系统so库API调用的限制(因为私有系统库会在任意时刻更新,使用这些系统库的应用有可能会在更新后崩溃),android 8.0引入了project Treble实现框架与供应商解耦合(解决系统碎片化,升级慢),这都需要依赖链接器命名空间机制。这里主要关注的重点是链接器命名空间在android 7.0引入后对System.loadLibrary,dlopen和dlsym函数的限制。Android 11 又对配置方式进行了修改,不再使用静态文件进行配置。原创 2024-04-28 14:44:01 · 1354 阅读 · 4 评论 -
Android system实战 — Android R(11) 第三方apk权限
最近在调试时遇到了第三方apk申请运行时权限,以及signature级别 install 权限不允许赋予给第三方apk,虽然这是Android系统安全性的一种体现,但在某些情况下,确实是有需求去放开权限,使app能使用更方便,毕竟让用户允许权限在一定程度上来说并不是一件容易的事情。原创 2023-03-02 17:05:21 · 2371 阅读 · 0 评论 -
Android system实战 — Android R(11) 进程保活白名单
最近在Android R上实现一些需求,进行记录一下,关于进程保活的基础知识可以参考Android system — 进程生命周期与ADJ,实际上本质上,就是在提高进程的adj等级,从而达到保活的效果,当然如果你不care原理,也可以直接看下面具体实现。 主要涉及源码路径:1.1 准备工作在源码实现之前,我们需要先准备进程白名单,并将其编译至白名单格式如下:该功能设置后,查看是否生效,可以通过查看进程的adj值来确认:例如:原创 2023-02-22 11:15:32 · 1196 阅读 · 0 评论 -
Android system — 进程生命周期与ADJ
必要时,系统会首先消除重要性最低的进程,然后是清除重要性稍低一级的进程,依此类推,以回收系统资源。在Android的lowmemroykiller机制中,会对于所有进程进行分类,对于每一类别的进程会有其oom_adj值的取值范围,oom_adj值越高则代表进程越不重要,在系统执行低杀操作时,会从oom_adj值越高的开始杀。本文主要介绍Android的lowmemorykiller的oom_adj的相关概念,进程的oom_adj,决定了当内存不够的时候,lmk会根据oom_adj的级别依次释放内存。原创 2023-02-19 15:00:08 · 1475 阅读 · 0 评论 -
Android system — settings数据库
Android系统设置数据库用于保存系统的一些默认设置值,另外在开发的时候,有时候我们一些设置属性要保存到本地,防止软件卸载后配置属性消失,也可以将这些值保存到系统数据库中。原创 2023-02-18 21:38:34 · 3346 阅读 · 2 评论 -
android9.0 系统默认时间跳变
最近修改客户问题的时候发现系统默认时间和ntp网络时间之间出现了一次时间的跳变,虽然不是什么大问题,但是可以跟进了解一下。原创 2022-09-22 17:10:15 · 1496 阅读 · 0 评论 -
Android logd日志原理
无论是Android系统开发,还是应用开发,都离不开log,Androd上层采用logcat输出log。因此我们这次基于Android源码9.0,解读logd的日志记录过程。logcat命令说明logcat -b events // 输出指定buffer的loglogcat -s "ActivityManager" logcat -L //上次重启时的loglogcat -f [ filename ] //将log保存到指定文件logcat -g //缓冲区大小。...原创 2022-08-29 14:24:42 · 1376 阅读 · 0 评论 -
分析解决logcat报read: Unexpected EOF
在做android开发调试过程中,我们经常会用到logcat,通过logcat可以更直接的看出程序执行的顺序以及开发产生的日志信息,但是,今天客户遇到一个问题,logcat提示read: Unexpected EOF!异常,然后日志就不在打印了。今天我们就分析一下为什么logcat会出现read: Unexpected EOF异常,以及出现read: Unexpected EOF异常后日志无法正常输出的原因。原创 2022-08-23 14:00:57 · 1885 阅读 · 0 评论 -
Android init.rc启动shell脚本
最近在解决客户的一个问题的时候,帮忙调试了一个开机脚本,其中涉及了部分SELinux的权限的配置,因此记录一下,该案例基于amlogicS905L3A芯片开发,在AndroidP上进行的测试,在其他设备上大同小异,请自行查找或替换为对应的路径。注AndroidP上为了区分系统和厂商定制化内容,脚本应编译至vendor/bin下,而不是system/bin下。...原创 2022-07-20 19:59:51 · 2431 阅读 · 0 评论 -
PowerManagerService(一)— 初始化
PowerManagerServcie是android系统电源管理的核心服务,它在Framework层建立起一个策略控制方案,向下决策HAL层以及kernel层来控制设备待机状态,主要功能是控制系统待机状态,屏幕显示,亮度调节,光线/距离传感器的控制等。 除了与应用程序交互之外,还要与系统中其它模块配合,在提供良好的能源管理同时提供友好的用户体验。比如听音乐时持续保持系统唤醒,应用通知来临唤醒手机屏幕等场景 分析一个服务,首先要从它对应用层提供的api 入手,观察提供了哪些接口调用;主要分为四个层次原创 2022-06-30 15:39:42 · 1100 阅读 · 1 评论 -
Android系统分析—OTA升级
Android系统分析—OTA升级1. recovery1.1 升级流程2. 辅助功能2.1 ui.cpp2.2 screen_ui.cpp2.3 default_device.cpp2.4 roots.cpp2.5 bootloader.cpp2.6 verifier.cpp2.7 install.cpp2.8 adb_install.cpp3. updater进程4. applypatch5. 其他辅助库6. RecoverySystem1. recovery recovery的源代码在boota原创 2022-03-08 15:00:17 · 4114 阅读 · 0 评论