aosp14上SystemUI相关的调试堆栈乱码无法对应行号,logcat无法输出

Android 12之启动画面Splash Screens(二) -- framework原理 本篇介绍Splash Screens的framework层原理。 阅读详情

背景

在做WMShell相关开发时候,或SystemUI相关模块一些调试时候,如下几类问题:

1、实体手机lineage系统上无法对SystemUI的一些java代码进行断点调试,根本不会进入断点(实际已经运行)
2、SystemUI中打印堆栈时候,不能正常展示出对应详细类名字,是一堆看不懂的hash码

3、发现logcat中无法抓取到SystemUI的Log.v级别的日志

针对android studio的断点调试根本无法运行,且打印堆栈也是出现下面一些hash码一样东西,根本无法知道具体情况
go/retraceme 420c0d65c52ef6f50f90080584eeaa4abe9e0659d00e941c0eb1401615ea21c6
在这里插入图片描述其实这里的1、2问题都是属于同一类问题,问题3属于另一类,所以就只需要分析2类问题既可以,下面针对上面几个问题进行剖析解决。

修改as调试及堆栈显示行号异常

问题分析思路:
首先只是在SystemUI进程里面打印堆栈才会出现堆栈是乱的一堆hash码一样的,但是SystemUI是可以正常运行的,系统进程和其他apk是正常的,说明这个可能这个apk是被优化了,那么控制apk优化一般是在编译的Android.bp里面控制
在这里插入图片描述

/ Opt-out config for optimizing the SystemUI target using R8.
// Disabled via `export SYSTEMUI_OPTIMIZE_JAVA=false`, or explicitly in Make via
// `SYSTEMUI_OPTIMIZE_JAVA := false`.
soong_config_module_type {
    name: "systemui_optimized_java_defaults",
    module_type: "java_defaults",
    config_namespace: "ANDROID",
    bool_variables: ["SYSTEMUI_OPTIMIZE_JAVA"],
    properties: ["optimize"],
}

systemui_optimized_java_defaults {
    name: "SystemUI_optimized_defaults",
    soong_config_variables: {
        SYSTEMUI_OPTIMIZE_JAVA: {
            optimize: {
                enabled: true,
                optimize: true,
                shrink: true,
                shrink_resources: true,
                proguard_compatibility: false,
            },
            conditions_default: {
                optimize: {
                    proguard_compatibility: false,
                },
            },
        },
    },
}

上面可以看出来如何想不优化则在编译make前进行export SYSTEMUI_OPTIMIZE_JAVA=false设置
在这里插入图片描述也可以单独编译make SystemUI,然后替换apk既可以

修改后结果如下:
在这里插入图片描述
这里堆栈无法显示具体类文件,其实就是因为Android.bp有相关的优化配置配置,只需要去除优化既可以,然后重新make。

Log.v日志无法输出问题修改

问题排查过程:
正常情况下一个普通app直接调用Log.v肯定是可以输出日志的,所以Log.v无法打印,那么第一怀疑是不是有源码中针对systemui进程有单独的过滤拦截。
分析一下源码:
frameworks/base/core/java/android/util/Log.java
在这里插入图片描述发现没看到有任何的拦截就直接调用了println_native,Log源码看着没有拦截。
那么试一下如果直接调用println_native(LOG_ID_MAIN, VERBOSE, tag, msg)方法看看是否可以打印,注意这里的LOG_ID_MAIN,VERBOSE可以直接使用数字:

    /** @hide */ public static final int LOG_ID_MAIN = 0;
     /**
     * Priority constant for the println method; use Log.v.
     */
    public static final int VERBOSE = 2;

添加如下代码验证:
在这里插入图片描述
结果发现:
println_native是有打印的,那么这就可以断定其实系统根本没有针对systemui进行拦截Log.v。

那么怀疑点就得回到SystemUI代码,这里也可以对apk进行反编译看看,是不是被编译时候混淆去除了呢?
果然在SystemUI目录下找到下面一个混淆配置文件
在这里插入图片描述
把相关的Log.v混淆部分去除掉
在这里插入图片描述
再进行编译make运行,一切正常:

在这里插入图片描述
更多framework技术干货,请关注下面“千里马学框架”

Android AOSP 15 SystemUI 定制:动态显示和隐藏手势导航提示条 记录在 Android 15 AOSP SystemUI 中添加充电动画时,遇到的手势导航模式下底部提示条不自动隐藏的问题,并分享通过修改源码实现动画播放时隐藏、动画结束时显示的技术方案。 阅读详情

相关推荐

Android 13 上通过修改 AOSP 拦截 SystemUI 音量调节事件

(如 android:permission=“android.permission.SYSTEM_ALERT_WINDOW”)。通过以上步骤,即可在 Android 13 的 AOSP 中实现对 SystemUI 音量调节事件的拦截与自定义处理。VolumeDialogImpl.java:处理 UI 交互事件(如按钮点击)。PhoneWindowManager.java:处理物理按键事件(如音量键)。多用户适配:在多用户环境下需处理用户上下文(如 UserHandle)。外部应用监听拦截广播并响应。

人生只是一种体验,不必用来演绎完美。 646

AOSP-系统应用-SystemUI

简介 在 Android 系统中,源码位置为 frameworks/base/packages/SystemUI。 原生代码:https://github.com/aosp-mirror/platform_frameworks_base/tree/master/packages/SystemUI 组件 StatusBar 状态栏 NavigationBar 导航栏 Notification 通知 Keyguard 锁屏 RecentTask VolumeUI 音量UI PowerUI 电量UI

小码快跑 1321

用Python和CasADi实现高斯伪谱法:一个轨迹优化问题的保姆级教程

本文详细介绍了如何使用Python和CasADi框架实现高斯伪谱法解决轨迹优化问题。通过保姆级教程,从环境准备、问题建模到高斯伪谱法的核心实现,包括配点与权重计算、微分矩阵构造和动力学约束实现,最终完成问题求解与结果可视化。适用于机器人轨迹规划和无人机路径优化等工程场景。

weixin_30776273的博客 294

辉哥的分屏学习笔记

安卓T 分屏

qq_30215785的博客 2122

保姆级教程:用AD20破解版从安装到汉化,一次搞定PCB设计环境搭建

本文提供AD20从安装到汉化的保姆级教程,详细解析环境配置、核心功能及高效操作技巧,帮助电子设计工程师快速掌握PCB设计工具。涵盖系统准备、界面定制、原理图设计、PCB布局布线等关键步骤,特别适合初学者避开常见陷阱。

weixin_30555125的博客 220

产品经理如何运用AI提升工作效率

AI技术的应用为产品经理的工作流程带来了显著的效率提升。从需求收集到产品上线,AI可以在多个阶段提供智能化支持,帮助产品经理更好地理解用户需求、优化产品设计、提高开发和测试效率。在未来,随着AI技术的不断发展,产品经理将能够更加高效地管理产品生命周期,为用户提供更优质的产品体验。应用 | AI + 千行百业欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

不想宅的冷同学 1340

Android 12系统源码_SystemUI(三)车载状态栏CarStatusBar的创建流程

通过Android12系统源码分析车载状态栏从启动到构建视图,再到将视图添加到Window的流程。

AfinalStone的专栏 4987

保姆级教程:在LKD3588开发板上为RK3588添加SC2210摄像头驱动(含完整DTS配置)

本文提供了一份详细的教程,指导如何在LKD3588开发板上为RK3588处理器添加SC2210摄像头驱动,包括完整的DTS配置和内核编译步骤。教程涵盖了环境准备、驱动文件添加、DTS配置详解、内核编译与烧录、驱动测试以及常见问题排查,帮助开发者快速实现SC2210传感器在RK3588平台上的集成与优化。

weixin_42641741的博客 480

Android 10 SystemUI中Android.bp文件中集成第三方JAR包或者so文件的方法

一、在SystemUI中集成第三方JAR包 1、在SystemUI项目中创建一个libs文件中,然后把jar包放进去,在Android.bp文件中添加如下java_import 代码段,这样就把kwmusic-autosdk-v2.0.2.jar添加进来了 java_library { name: "SystemUI-proto", srcs: ["src/**/*.proto"], proto: { type: "nano", }, } java_imp

wq892373445的博客 3626

VOLTE信令流程-IMS注册篇(五)

目录 VOLTE信令流程-IMS 注册 VOLTE信令流程-IMS 注册/注销 VOLTE信令流程-VoLTE呼叫流程 VoLTE-VoLTE VoLTE-CS CS-VoLTE CS-CS VOLTE信令流程 VOLTE信令流程-VOLTE-VOLTE信令 VOLTE信令流程-INVITE详细信息 VOLTE信令流程-eSRVCC信令流程 VOLTE信令流程-IP短信 VOLTE信令流程-IMS 注册 IMS注册流程简述  获取鉴权向量 IMS用户将注...

gender123的博客 2万+

《揭秘 BME688人工智能压力湿度温度气体传感器:气体检测的多面能手》:此文为AI自动生成

BME688 是博世推出的一款具有人工智能和集成高线性度高精度压力、湿度、温度传感器的气体传感器,专为移动和联网应用开发,尺寸紧凑且低功耗。BME688 作为一款先进的传感器,在多个领域展现出卓越的性能。它采用了坚固而紧凑的 3.0 x 3.0 x 0.9 mm³ 封装,这种小巧的尺寸使其能够轻松应用于对空间要求严格的移动设备和联网应用中。同时,低功耗的特性也使得它在能源有限的环境下能够长时间稳定运行。

zheng_ruiguo的专栏 1939

AndroidQ(10.0) SystemUI 修改踩坑汇总

上来先吐槽下,Q 的 SystemUI真的太奇葩了,搞了好几天jar包还没成功导入,同样jar包在其它模块下导入是没问题 的,唉,真是太难了。总结下这几天尝试的各种方法,也算是填坑了。 坑一、采用 Android.bp 方式编译 Android.bp 是从 7.0 之后引入的,但在10.0之前源码中大多模块都还是采用 Android.mk 配置编译,到了Q中几乎全都是。虽然有 androidmk 工具可将 mk 转为 bp,但复杂的mk转换后大概率是错的。 androidmk 工具路径 out/soong

cczhengv 3455

[企业AI落地] RAG 知识库系统在多租户环境下的细粒度权限隔离设计

多租户 RAG 系统真正的风险不只是搜不到,而是把不该看到的内容查出来、说出来、写回去。本文结合多客户售后知识助手场景,用元数据结构、向量检索过滤、回答策略和审计回写示例拆解租户、资源、检索、生成、审计五层权限边界。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 223

SystemUI 解析

SystemUI(System User Interface)是Android 系统为用户提供的系统级别的信息显示与交互的UI组件应用程序,包含状态栏、导航栏、锁屏、通知面板、快速设置、最近任务等,它们各部分独立,各尽其责。SystemUI是一个常驻应用程序,只要系统运行,它就会一直运行,即使被杀死也会重新启动。

八归少年 2418

《YOLO26/YOLO11/YOLOv8改进与系统实战》,改进与系统实战专栏目录和介绍

YOLOv8 是目前比较火和比较成熟的深度学习框架,是2023年1月发布的,由 Ultralytics 团队开发。Ultralytics自YOLOv5 开始一直积极维护和更新 YOLO 框架,因此 YOLOv8 也享有持续的维护与升级支持。因此我写下《手把手教你YOLOv8实战》专栏,专门为那些对计算机视觉、深度学习、以及目标检测技术感兴趣的读者设计。通过本专栏,你将深入理解 YOLOv8 的核心原理与实际应用,从0 开始学习并掌握如何使用 YOLOv8 完成各类目标检测任务,帮助你快速上手并掌握 YOLO

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android --- SystemUI 导入Android Studio及debug

可以替换所有import com.android.systemui.res.R 为 import com.android.systemui.R 这仅仅是为了AndroidStudio调试方便。这里为 了不破坏systemui结构就不合并了,主要的java跳转及部分的res跳转已经完成,这样能 大大提高SystemUI的开发以及调试效率。SystemUI/src/com.android.keyguard/ 下的文件仍无法进行资源跳转,原因是在配置Android的时候。点击apply应用这些设置。

m0_50408097的博客 1946

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SystemUI启动流程——基于Android P AOSP

Android系统启动流程: 按下电源,系统上电 从固定地址启动固化在ROM的BootLoader程序 启动Linux内核,加载init进程 启动init进程,fork出zygote进程 启动SystemServer,启动Binder线程池以及各种服务 AMS启动Launcher, 然后你就看到该看到的了 SystemUI作为系统主要进程,就是在SystemServer启动的服务其中之一。 话...

Android扫地僧 1186

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Android系统源码导读:AOSP是什么,系统如何一步步启动?

所有APP都是从Zygote中复制出一个进程,不用再从零加载系统资源,所有APP共用一份内存,启动更快,节省资源。ART虚拟机:每个应用都在自己的进程中运行,并且有自己的ART,ART把Java代码编译成DEX,在Android平台运行。init进程上线后,先读取init.rc配置文件,按顺序启动各项服务,其中Zygote进程是最重要。特权应用:能调用一部分系统API,权限更高,一般是系统预装应用,如短信、电话。设备制造商应用:厂商做的系统级App,权限最高,能直接调用框架层的内部接口。

2301_79096607的博客 268

Android 16系统源码_分屏模式(二)全屏分屏模式层级树信息

通过对比全屏和分屏模式下的窗口层级树信息,理解分屏模式的实现思路。

AfinalStone的专栏 5520

SystemUI之——信号显示流程,基于Android P AOSP

上一篇讲到,SystemUIApplication中,会加载各种服务并启动,Dependency就是其中之一并且是第一个被启动的服务: 源码中对Dependency的介绍: Dependencies The first SystemUI service that is started should always be Dependency. Dependency provides a static...

Android扫地僧 3236

android 13 WMS/AMS系统开发-SplashScreen的添加与移除分析

在系统开发过程中大家要学会怎么来学习追踪代码,这一点是非常关键的,因为在庞大系统代码中,如果什么都进行正向分析,那么很有可能因为代码过于庞大,进入分支过多而导致丢失方向,失去了主要线路,陷入一种丢了西瓜捡到芝麻情况,这情况其实经常在分析系统源码时候常见,但是这其实对我们学习主流程来说是非常不利的,因为我们往往对代码执行的主流线路都还没有摸清,没有办法对流程有一个比较好的理解,而容易被执行某个小点,小部分卡住。这里我们既可以去看一下StartingSurfaceDrawer代码,然后从它的代码开始入手分析。

learnframework的博客 2466

Android SystemUI启动流程深度解析

Android SystemUI是系统的重要组成部分,负责状态栏、导航栏等用户界面的显示。其启动流程包括:Zygote进程孵化SystemServer进程,启动ActivityManagerService等核心服务;AMS通过启动SystemUIService来加载SystemUI组件;SystemUIApplication通过反射初始化StatusBar、NotificationPanel等核心模块。SystemUI与WindowManager紧密交互,以窗口形式展示界面元素。整个启动过程涉及多个系统服务

顾林海 3162

Android13 SystemUI启动过程

systemui初始化

qq_34694875的博客 1426

AAOS 整体架构分析 —— 基于 Android 14

文章摘要 本文深入分析了Android Automotive OS(AAOS)在Android 14中的整体架构,重点比较了AAOS与标准AOSP的关键差异。AAOS在保留Android核心功能的基础上,增加了车载专用的组件:包括Vehicle HAL硬件抽象层、独立的CarService进程(包含16个子服务)、定制化车载应用以及特殊的电源管理模型。文章详细解析了CarService的启动流程和内部结构,展示了它如何通过Binder与系统服务和应用交互。与手机系统相比,AAOS在稳定性、安全性和多屏交互方

Deep Lee的专栏 564

SystemUI

SystemUI是Android操作系统中的一个关键系统级应用,负责管理和提供用户界面的核心元素,主要包括:StatusBar(状态栏)、NavigationBar(导航栏)与Notification Panel(通知栏),以及Notification Panel(通知面板)等,另外在Android8.0代码中,Keyguard(锁屏)模块已经从外部被合并到SystemUI源码目录下。

qq_66104156的博客 2104
上一篇: 安卓14剖析SystemUI的ShadeLogger/LogBuffer日志动态控制输出dumpsy机制
下一篇: InputDispatcher的调试日志isLoggable动态开放logcat实战使用
千里马学框架
博客等级 码龄6年 1万+粉丝 651原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值