问题系列---Android Studio调试services源码不显示参数值

戳蓝字“牛晓伟”关注我哦!

用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章,技术文章也可以有温度。

前言

问题系列主要的作用是把我在研究Android源码过程中遇到的各种问题集合起来,当然这些问题在Stack Overflowgoogle是没有搜到解决方案的,希望本系列可以帮助大家。

1. 问题描述

Android Studio调试services源码时不显示参数、局部变量值。(Android 13代码)

2. 原因与解决

原因

是因为在编译services.jar的时候开启了混淆,混淆即对代码中的类名变量名方法名等变为简单、难懂的名字,这样人无法看明白这些名字,就很难去猜测代码意思。这是导致调试的时候显示不了参数、局部变量的值原因。如下代码:

//文件名:services/Android.bp

java_library {
    name: "services",
    defaults: ["services_java_defaults"],
    installable: true,

    dex_preopt: {
        app_image: true,
        profile: "art-profile",
    },

    省略代码······

}

soong_config_module_type {
    name: "system_optimized_java_defaults",
    module_type: "java_defaults",
    config_namespace: "ANDROID",
    bool_variables: ["SYSTEM_OPTIMIZE_JAVA"],
    properties: ["optimize"],
}

//下面配置会对代码进行混淆、裁剪
system_optimized_java_defaults {
    name: "services_java_defaults",
    soong_config_variables: {
        SYSTEM_OPTIMIZE_JAVA: {
            optimize: {
                enabled: true,
                // TODO(b/210510433): Enable optimizations after improving
                // retracing infra.
                optimize: false,
                shrink: true,
                proguard_flags_files: ["proguard.flags"],
            },
            // Note: Optimizations are disabled by default if unspecified in
            // the java_library rule.
            conditions_default: {},
        },
    },
}

做过App开发的同学应该都清楚,App的release版本代码也是需要开启混淆代码裁剪的,谁曾想到services.jar也进行了代码混淆代码裁剪的。

解决

解决该问题就非常简单了,把混淆关掉重新编译services.jar后,push到Android设备即可。如下代码:

//文件名:services/Android.bp

//下面配置会对代码进行混淆、裁剪
system_optimized_java_defaults {
    name: "services_java_defaults",
    soong_config_variables: {
        SYSTEM_OPTIMIZE_JAVA: {
            optimize: {
                //置为false,混淆不可用
                enabled: false,
                // TODO(b/210510433): Enable optimizations after improving
                // retracing infra.
                optimize: false,
                //把裁剪也置为false
                shrink: false,
                proguard_flags_files: ["proguard.flags"],
            },
            // Note: Optimizations are disabled by default if unspecified in
            // the java_library rule.
            conditions_default: {},
        },
    },
}

欢迎关注我的公众号
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/887945.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初识Linux · 自主Shell编写

目录 前言: 1 命令行解释器部分 2 获取用户命令行参数 3 命令行参数进行分割 4 执行命令 5 判断命令是否为内建命令 前言: 本文介绍是自主Shell编写,对于shell,即外壳解释程序,我们目前接触到的命令行解释器&am…

【CKA】一、基于角色的访问控制-RBAC

1、基于角色的访问控制-RBAC 1. 考题内容: 2. 答题思路: 这道题就三条命令,建议直接背熟就行。 也可以查看帮助 kubectl create clusterrole -h kubectl create serviceaccount -h kubectl create rolebinding -h 注意: 1、资…

VirtualBox虚拟机连接宿主机并能够上网(小白向)

现存问题 windows系统主要使用vmare和virtualbox两种虚拟机,virtualbox相对于vmare更加轻便,但少有博客能够详细说明使用virtualbox的教程。踩了网上的坑后,决定写一篇文章介绍virtualbox虚拟机上网的流程。 需求 1. virtualbox虚拟机与宿主机…

Android SystemUI组件(10)禁用/重启锁屏流程分析

该系列文章总纲链接:专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明: 说明:本章节持续迭代之前章节的思维导图,主要关注左侧上方锁屏分析部分 应用入口处理流程解读 即可。 在 Android 系统中,禁用锁屏…

AI学习记录 - L2正则化详细解释(权重衰减)

大白话: 通过让反向传播的损失值变得比原来更大,并且加入的损失值关联到神经网络全部权重的大小,当出现权重的平方变大的时候,也就是网络权重往更加负或者更加正的方向走的时候,损失就越大,从而控制极大正…

【PostgreSQL】PG数据库表“膨胀”粗浅学习

文章目录 1 为什么需要关注表膨胀?2 如何确定是否发生了表膨胀?2.1 通过查询表的死亡元组占比情况来判断膨胀率2.1.1 指定数据库和表名2.1.2 查询数据库里面所有表的膨胀情况 3 膨胀的原理3.1 什么是膨胀?膨胀率?3.2 哪些数据库元…

Unity Asset Store的默认下载位置及更改下载路径的方法

修改Unity Asset Store的默认下载路径 Unity Asset Store默认下载位置 Unity Asset Store里下载资源,默认是下载到C盘里的,如果你不想做C盘战士的话,记得将下载的资源转移到其他盘。 Unity商城默认下载路径是C:\用户\用户名(一般…

晶体管最佳效率区域随频率逆时针旋转原因分析

晶体管最佳效率区域随频率逆时针旋转原因分析 在功率放大器的设计时,晶体管最佳区域随频率逆时针旋转。但是,对于一般的微带电路,匹配阻抗区域是随着频率顺时针旋转的(也有称这个特性是Foster特性),因此功…

UE5学习笔记23-给角色添加血量,添加收到伤害的功能

零、一些游戏框架知识 1.UE5中包含游戏模式类(Game Mode)、游戏状态类(Game State)、玩家状态类(Player State)、玩家控制器类(Player Controller)、所有的可以被控制的实体或角色类(Pawn)、窗口类(HUD/Widget) Game Mode:存在在服务器上,当我们在客户端…

Redis实现每日签到(大数据量)

PHP语言使用Redis NoSQL服务器二进制数据类型实现大数据情况下签到功能 目录 问题 解决方式 封装签到类 功能调用 总结 问题 实现用户每日签到功能不难,但随着用户量上升之后,不论是存储还是判断对数据量来说都很麻烦;假如每天有100万用…

【STM32开发环境搭建】-4-在STM32CubeMX中新增Keil(MDK-ARM) 5的工程目录(包含指定路径的C和H文件)

案例背景: 由于Keil(MDK-ARM)5工程:DEMO_STM32F030C8T6.uvprojx是由STM32CubeMX工具生成的,如果我们在Keil工程中手动添加了一些c文件和h文件的Include Path包含路径,会在STM32CubeMX下一次生成uvprojx文件时,被删除&…

C语言复习概要(四)

本文 1. 操作符的分类算术操作符关系操作符逻辑操作符 2. 二进制制和进制转换二进制与十六进制的表示进制转换算法 3. 原码、反码和补码原码反码补码 1. 操作符的分类 C语言中的操作符种类繁多,常用的主要操作符可以按照其功能进行如下分类: 算术操作符…

Emergency Stop (ES)

文章目录 1. 介绍2. Feature List3. 紧急停止信号触发方式3.1 Port触发紧急停止信号3.2 SMU事件触发紧急停止信号3.3 软件触发紧急停止信号 4. 应用场景4.1 Port4.2 MSC 1. 介绍 Emergency Stop (ES)是Ifx System Control Units (SCU)六大模块之一。详细信息可以参考Infineon-…

毕设 大数据抖音短视频数据分析与可视化(源码)

文章目录 0 前言1 课题背景2 数据清洗3 数据可视化地区-用户观看时间分界线每周观看观看路径发布地点视频时长整体点赞、完播 4 进阶分析相关性分析留存率 5 深度分析客户价值判断 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕…

以太网交换安全:MAC地址表安全

一、MAC地址表安全 MAC地址表安全是网络安全中的一个重要方面,它涉及到网络设备的MAC地址表的管理和保护。以下是对MAC地址表安全的详细介绍: (1)基本概念 定义:MAC地址表是网络设备(如交换机&#xff0…

阿里云域名注册购买和备案

文章目录 1、阿里云首页搜索 域名注册2、点击 控制台3、域名控制台 1、阿里云首页搜索 域名注册 2、点击 控制台 3、域名控制台

关系数据库和关系模型(1)

昨天补充了DBMS概况的存储管理层面,今天来详细介绍数据库管理系统中常见且应用广泛的关系型数据库(简称关系数据库),比如postgreSQL、MySQL、Oracle Database。 关系模型 关系模型是数据库中如何进行存储和组织数据的理论基础。…

掌控物体运动艺术:图扑 Easing 函数实践应用

现如今,前端开发除了构建功能性的网站和应用程序外,还需要创建具有吸引力且尤为流畅交互的用户界面,其中动画技术在其中发挥着至关重要的作用。在数字孪生领域,动画的应用显得尤为重要。数字孪生技术通过精确模拟现实世界中的对象…

虚幻引擎GAS入门学习笔记(一)

虚幻引擎GAS入门(一) Gameplay Ability System(GAS) 是一个模块化且强大的框架,用于管理虚幻引擎中的游戏玩法逻辑。它的核心组成部分包括 Gameplay Ability(定义和执行能力)、Gameplay Effect(应用和管理…

mit6824-01-MapReduce详解

文章目录 MapReduce简述编程模型执行流程执行流程排序保证Combiner函数Master数据结构 容错性Worker故障Master故障 性能提升定制分区函数局部性执行缓慢的worker(slow workers) 常见问题总结回顾参考链接 MapReduce简述 MapReduce是一个在多台机器上并行计算大规模数据的软件架…