正确定位混淆后Crash代码行数

article/2025/10/31 20:55:43

Android--定位混淆后Crash代码行数

    • 一、需求背景
    • 二、前期准备
    • 三、对混淆日志进行还原
    • 四、示例

一、需求背景

打包时需要对代码进行混淆,目的是增加安全性,防⽌反编译。但这会导致App崩溃时,抓到的日志堆栈中显示的代码行数对应不上,不便于进行问题定位。因此需要对日志堆栈中的代码反混淆。

二、前期准备

  1. proguardgui.sh:SDK提供给我们的工具,通过它来还原正确的crash行数。
    路径:${ANDROID_HOME}/tools/proguard/bin

  2. 打包时生成的mapping.txt:此⽂件存放着源码到混淆后代码的映射关系。
    路径:app/build/outputs/mapping/release/

  3. 抓到的错误日志

  4. (可选)配置环境变量:打开.bash_profile,加入该行,便于启动可视化操作界面。

export PATH=${PATH}:${ANDROID_HOME}/tools/proguard/bin

配置完成后执行一次source ~/.bash_profile,使其生效。终端输入proguardgui.sh便可启动。
若不进行配置,将proguardgui.sh文件直接拖入终端执行即可。

遇到的问题:proguardgui.sh无法打开

解决方法:下载最新版Proguard(https://github.com/Guardsquare/proguard/releases)
解压后将其放入proguard同级目录,修改环境变量,终端输入proguardgui.sh启动。

(笔者下载时最新版本为proguard-7.2.2.tar.gz)

三、对混淆日志进行还原

在这里插入图片描述
按照箭头的操作顺序
第一步:点击左侧的ReTrace
第二步:选择mapping.txt文件
第三步:将Countly错误日志贴在Obfuscated stack trace中
第四步:点击右下角ReTrace!进行还原
第五步:De-obfuscated stack trace中会出现还原后的日志信息

注:1、app目录下proguard-rules.pro⽂件中需有如下配置

-keepattributes SourceFile,LineNumberTable

2、Obfuscated stack trace填写错误⽇志时,⽇志前⾯需要加at,如果有则不⽤加,否则⽆法解析。

四、示例

抓到的错误日志如下(可见方法名及行数显示均不正确):

com.ume.android.lib.common.log.UmeException: ThrowableUtils ui exception:Attempt to invoke virtual method 'void com.umetrip.android.msky.checkin.checkin.c2s.C2sTravelHealthInfo.setType(int)' on a null object reference
at com.ume.android.lib.common.log.SystemLog.upload(SystemLog.java:13)
at com.ume.android.lib.common.util.ThrowableUtils$2.run(ThrowableUtils.java:3)
at android.os.Handler.handleCallback(Handler.java:955)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:228)
at android.app.ActivityThread.main(ActivityThread.java:8679)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:613)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1085)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.umetrip.android.msky.checkin.checkin.c2s.C2sTravelHealthInfo.setType(int)' on a null object reference
at com.umetrip.android.msky.checkin.virtualcabin.CkiNonSupportActivity.Z1(CkiNonSupportActivity.java:2)
at com.umetrip.android.msky.checkin.virtualcabin.CkiNonSupportActivity.t1(CkiNonSupportActivity.java:1)
at com.umetrip.android.msky.checkin.virtualcabin.CkiNonSupportActivity$i.a(CkiNonSupportActivity.java:1)
at com.umetrip.android.msky.checkin.virtualcabin.dialog.CheckInOperationManger$a.onClick(CheckInOperationManger.java:4)
at android.view.View.performClick(View.java:7592)
at android.view.View.performClickInternal(View.java:7566)
at android.view.View.access$3700(View.java:840)
at android.view.View$PerformClick.run(View.java:28910)
at android.os.Handler.handleCallback(Handler.java:955)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:228)
at com.ume.android.lib.common.util.ThrowableUtils$2.run(ThrowableUtils.java:1)
... 7 more

按照步骤三进行还原,可见已成功定位到crash代码行数
在这里插入图片描述


http://chatgpt.dhexx.cn/article/qnT0twvV.shtml

相关文章

repalce

1、replace基本用法 <script>/*要求将字符串中所有的a全部用A代替*/var str "javascript is great script language!";//只会将第一个匹配到的a替换成Aconsole.log(str.replace("a", "A")); // > jAvascript is great script language…

Android studio 4.2新特性及升级异常

Android studio 版本及特性系列目录 Android 12 终于来了&#xff0c;你准备好了吗&#xff1f;Android studio 4.2新特性Android studio 4.1新特性Android Studio 4.0新特性及升级异常Android Studio3.6. 插件搜索不到终极解决方案 Android studio 4.2新特性 前言升级异常Gra…

强化学习的学习之路(五十一)2021-02-20 Retrace

作为一个新手&#xff0c;写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程&#xff0c;希望对大家能有所帮助。这个系列后面会不断更新&#xff0c;希望自己在2021年能保证平均每日一更的更新速度&#xff0c;主要是介绍强化学习的基础知识&#xff…

RecId

我记得好像AX最初版本RecId是所有表都唯一的。但是这样有一个坏处就是限制了数据库可存储的数据的条数。D365FO中RecId 不再全局唯一&#xff0c;但是表唯一。 每个表都有一个Sequences生成表的RecId,格式是&#xff1a;SEQ_TableId 右键Sequences可以看下当前RecId的值&#…

ResNet过程

#ResNet 因为网络传播的层次太深&#xff0c;后面的很难传播到前面&#xff0c;所以增加了一个短接层&#xff0c;深层次网络可以退化成一个浅层次网络 #filter_num 卷积核数量 #stride 步长 class BasicBlock(layers.Layer):def __init__(self,filter_num,stride1):super(Bas…

Android Stuido Proguard Retrace Unscrambler直接reProguard反混淆retrace日志

Android Stuido Proguard Retrace Unscrambler直接reProguard反混淆retrace日志 &#xff08;1&#xff09;如果Android Studio里面没有安装下列插件之一的&#xff0c;在Settings的Plugins里面安装其中一个&#xff1a; &#xff08;2&#xff09;菜单栏中的code里面找到反混…

android还原代码混淆proguard日志的工具--retrace和SmartRetrace

介绍 代码混淆时android反编译的常用方法&#xff0c;android SDK提供了Proguard工具&#xff0c;路径是 ANDROID_SDK_HOME/tools/proguard 命令行在ANDROID_SDK_HOME/tools/proguard/bin下&#xff0c;而实际的执行代码路径为ANDROID_SDK_HOME/tools/proguard/lib apk经过混…

with recursive用法

with recursive 则是一个递归的查询子句&#xff0c;他会把查询出来的结果再次代入到查询子句中继续查询。 with recursive d(n, fact) as ( values (1,2) union all #合并 select n1, (n1)*fact from d where n < 5) SELECT * from d;递归过程如下&#xff1a; n1 fact2 n…

python实验之绘制南丁格尔玫瑰图

一、实验目的 了解玫瑰图的前世今生&#xff1b;了解 matplotlib 标准库中的 pyplot 模块&#xff1b;了解在极坐标 系中绘制柱状图。 二、实验基本原理及步骤&#xff08;或方案设计及理论计算&#xff09; 实验步骤&#xff1a; 查阅文档&#xff0c;了解南丁格尔玫瑰图的原…

南丁格尔玫瑰图 | 集才华和美貌于一身的数据图表

南丁格尔玫瑰图将柱图转化为更美观的饼图形式&#xff0c;是极坐标化的柱图&#xff0c;其夸大了数据之间差异的视觉效果&#xff0c;适合展示数据原本差异小的数据。 1、玫瑰图的前世今生 长得像饼图又不是饼图&#xff0c;这种有着极坐标的统计图有着一个美丽的名字—南丁格…

雷达图+南丁格尔玫瑰图

具体实现的效果图&#xff1a; 使用的图表插件是echarts,具体的完整代码如下&#xff1a; import * as echarts from echarts;var chartDom document.getElementById(main); var myChart echarts.init(chartDom); var option;var arr [{ name: 1楼, value: 30 },{ name: 2楼…

Echarts南丁格尔玫瑰图、锥形柱状图、渐变曲线图

目录 1、南丁格尔玫瑰图 2、锥形柱状图 3、渐变曲线图 4、曲线图 1、南丁格尔玫瑰图 option {title: {text: 作物占比,left: 50, // 组件离容器左侧的距离top: 20},legend: {top: 52%,x: center,y: top,width: 180,height: 60,itemGap: 30,itemWidth: 15,itemHeight: 1…

Python数据可视化之南丁格尔玫瑰图(亲测)

文章目录 1. 什么是南丁格尔玫瑰图2. 南丁格尔玫瑰图的绘制 1. 什么是南丁格尔玫瑰图 央视新闻用来展示疫情0增长天数的图就是南丁格尔玫瑰图。 南丁格尔玫瑰图&#xff08;Nightingale rose diagram&#xff09;又名鸡冠花图、极坐标区域图。统计学家和医学改革家佛罗伦斯‧…

【R语言 南丁格尔玫瑰图绘制】

继续上一篇地理信息可视化讲起&#xff0c;为了能够更加直观的展示数据分布情况&#xff0c;发现之前人民日报客户端曾经做过一张关于疫情分布的玫瑰图&#xff0c;非常惊艳&#xff0c;故尝试用当前爬取的数据进行绘制。 绘图前数据整理 现存数据中不少地区病例已经清零&…

南丁格尔玫瑰图解析

一&#xff1a;先安装软件&#xff0c;任意一个都可以 PyCharm安装教程 https://www.cnblogs.com/du-hong/p/10244304.html Anaconda安装教程 https://blog.csdn.net/ITLearnHall/article/details/81708148 二&#xff1a;相关软件以及Python库的知识讲解&#xff1a; Py…

Echarts南丁格尔图.

项目场景&#xff1a; 通过Echarts修改南丁格尔图js文件&#xff0c;修改轮盘颜色。使项目更加美观 文本标签自定义 问题描述 不知道为什么自定义函数使饼图图形上的文本标签label标签显示在内部且&#xff0c;获得对应标签的数据。使用自定义函数formatter的参数是ar&#…

Python+Matplotlib绘制饼状图模拟南丁格尔玫瑰图

开学第一课&#xff1a;一定不要这样问老师Python问题 董付国老师Python系列教材推荐与选用参考 版权声明&#xff1a;由于公众号后台规则问题&#xff0c;本文暂时无法设置原创标记&#xff0c;但仍属原创内容&#xff0c;微信公众号“Python小屋”坚持只发原创技术文章。 推…

使用Matplotlib绘制南丁格尔玫瑰图

前言 在前文中&#xff0c;我们介绍了使用pyecharts绘制南丁格尔玫瑰图&#xff0c;本章我们再学习一下使用matplotlib绘制南丁格尔玫瑰图&#xff0c;了解在极坐标系中绘制柱状图。并对比一下两种不同的绘制方法&#xff0c;如何实现&#xff1f; 介绍 玫瑰图是弗罗伦斯南丁…

从南丁格尔图到医学发展史

可视化中&#xff0c;前端用于表现不同类目的数据在总和中的占比的场景&#xff0c;往往会采用饼图。 针对数据大小相近&#xff0c;南丁格尔图的呈现会更加美观。 南丁格尔图&#xff0c;又称玫瑰图&#xff0c;是由弗罗伦斯南丁格尔发明。 弗洛伦斯南丁格尔 开创了护理事业…

echarts绘制嵌套环形图(南丁格尔玫瑰图)

根据专业总人数和学院总人数绘制嵌套环形图 首先&#xff0c;echarts的基本步骤 引入js&#xff0c;准备容器&#xff0c;初始化实例&#xff0c; <script src"lib/echarts.min.js"></script><style>.box{width: 900px;height: 500px;background…