当前位置: 首页 > news >正文

android studio调试aosp手机userdebug版本无法查看局部变量和参数问题如何解决?

背景:

平常系统开发过程中,经常需要对一些代码进行相关追踪,这个时候很多同学会使用马哥课程讲解的android studio直接进行调试的方法,但是近期有学员朋友在群里反馈它在调试过程中无法看到方法参数的值,局部变量值,只可以看到全局变量值。
在这里插入图片描述
因为我们都是使用模拟器居多,模拟器编译的版本一般都是eng版本,所以没有这个同学问题,针对这样一类问题一般都是可能和自己的手机设备版本类型有关系,这个有问题版本确定是一个userdebug版本。
可以通过如下方式确认:

test@test:~/disk2/nx563j_aosp14$ adb shell getprop | grep build.type
[ro.build.type]: [userdebug]
[ro.odm.build.type]: [userdebug]
[ro.system.build.type]: [userdebug]
[ro.system_ext.build.type]: [userdebug]
[ro.vendor.build.type]: [userdebug]
[ro.vendor_dlkm.build.type]: [userdebug]

可以确认是userdebug版本。

简单解决问题痛点:

方法1:
针对上面的问题,大家第一反应可能会说,既然eng版本没有问题,那么是否可以考虑编译一个整体eng的包不就行了?这种方法其实有条件情况下确实是一个最省事方法,但是很多时候出版本的不一定是自己,大家可能都是取公司编译好的版本用,然后修改自己模块push进去就行,所以很多时候不一定有完全eng的大版本可以使用。
所以这个直接使用eng版本还是存在一定的局限性,有时候不一定有条件获取到这个eng。

方法2:
针对自己关注的局部变量或者参数,可以考虑修改代码赋值给成员变量或者全局变量。这种方式当然是可以,但是比较麻烦,看一个局部变量就需要加对应成员变量全局变量不现实,还不如直接打印来的方便。

所以上面两个解决方法都确实有很多局限性。

彻底解决方法

突破点思路来源因为因为eng版本是可以看到局部变量的,其实不展示局部变量主要还是在于eng和userdebug在编译时候的保留的相关信息不一样,eng肯定编译时候保留的最多,基于这个背景我们做出如下解决方法:
这里以编译system_server的jar包services.jar为例子

第一步:
lunch到目标的eng版本
注意这里一般使用是正常目标加上-eng既可以,比如lunch xxx-eng
例如
但是这里注意如果是lineage系统的话直接breakfast xxx-eng可能有报错,建议可以用lunch命令:
用如下命令

lunch lineage_nx563j-eng

注意和平时breakfast nx563j相比多了lineage_,这个大家可以通过lunch命令看看列表找到自己目标
在这里插入图片描述

第二步:
进行make services

第三步:
push jar包然后重启system_server

 adb push out/target/product/nx563j/system/framework/services.jar /system/framework/services.jar
  adb shell killall system_server

最后看看userdebug版本debug也可以展示局部变量效果:

在这里插入图片描述

整体思路还是lunch目标时候变成eng版本,然后进行单模块编译push覆盖既可以。

以后待补充部分:eng和userdebug的编译差异是在哪里进行区分的,这块相关的代码后续有时间在考虑研究

更多framework实战开发干货,请关注下面“千里马学框架”

http://www.dtcms.com/a/97178.html

相关文章:

  • 【从零实现Json-Rpc框架】- 项目实现 -抽象消息类实现篇
  • Uni-app入门到精通:subPackages节点为小程序的分包加载配置
  • 实现金蝶与钉钉无缝对接以高效管理银行账号信息
  • 人脸识别新规落地,“多模态认证”将成常态
  • 每日一题之日期统计
  • 为什么大模型在 OCR 任务上表现不佳?
  • 包络解调在故障诊断中的应用-广义检波解调案例
  • 架构师面试(二十二):TCP 协议
  • PDF处理控件Spire.PDF系列教程:使用 JavaScript 在 React 中将 PDF 转换为 HTML
  • java八股文之企业场景
  • rv1106抓h264流
  • 从泛读到精读:合合信息文档解析如何让大模型更懂复杂文档
  • 【leetcode刷题记录】(java)贪心
  • Netty - 从Nginx 四层(TCP/UDP)流量中获取客户端真实/网络出口IP
  • Java实现pdf中动态插入图片
  • 如何在 Postman 中正确设置 Session 以维持用户状态?
  • 亚马逊云科技提供完全托管的DeepSeek-R1模型
  • SEO(搜索引擎优化)详解
  • 处理脚本中函数调用的异常
  • 基于深度强化学习的智能机器人路径规划技术研究
  • 第六届 蓝桥杯 嵌入式 省赛
  • Postman CORS 测试完全指南:轻松模拟跨域请求,排查 CORS 相关问题
  • 软考中级-软件设计师 23种设计模式(内含详细解析)
  • Gateway实战(二)、负载均衡
  • React 中shouldComponentUpdate生命周期方法的作用,如何利用它优化组件性能?
  • Python爬虫如何检测请求频率?
  • Docker-Volume数据卷详讲
  • 循环神经网络 - 给网络增加记忆能力
  • 优化webpack打包体积思路
  • WebSocket:实时双向通信技术详解与实战示例优化指南