首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在R8混淆后使用retrace获得正确的行号?

在R8混淆后使用retrace获得正确的行号,可以按照以下步骤进行操作:

  1. 确保在构建应用时启用了R8混淆。在项目的build.gradle文件中,确保以下代码行未被注释或删除:
  2. 确保在构建应用时启用了R8混淆。在项目的build.gradle文件中,确保以下代码行未被注释或删除:
  3. 构建并签名应用的发布版本。在Android Studio中,选择Build -> Generate Signed Bundle/APK,按照向导的指示完成构建和签名过程。
  4. 在构建完成后,可以在app/build/outputs/mapping/release/目录下找到混淆映射文件(mapping.txt)。
  5. 使用retrace工具解析混淆映射文件。在命令行中执行以下命令:
  6. 使用retrace工具解析混淆映射文件。在命令行中执行以下命令:
  7. 其中,mapping.txt是混淆映射文件的路径,stacktrace.txt是包含崩溃堆栈信息的文本文件。
  8. 解析完成后,retrace将会输出包含正确行号的堆栈跟踪信息。

需要注意的是,R8混淆和retrace工具是Android SDK自带的工具,无需额外安装。此外,R8混淆和retrace工具是与开发工具(如Android Studio)紧密集成的,因此无需引入任何腾讯云相关产品。

参考链接:

  • R8混淆官方文档:https://developer.android.com/studio/build/shrink-code?hl=zh-cn
  • retrace工具官方文档:https://developer.android.com/studio/build/shrink-code?hl=zh-cn#retrace
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

「玲珑宝塔」优化 Apk 包大小

1.3 开启压缩、混淆(减少 2.4 MB) 根据 Google 官网解释,当我们使用 Android Gradle 3.4.0 或者更高版本时,默认会启用 R8 编译器进行压缩、混淆以及优化,主要项以及作用如下...例如,如果 R8 检测到从未采用过给定 if/else 语句 else {} 分支,R8 便会移除 else {} 分支代码。 这里需要注意一下: 默认情况下并不启用压缩、混淆和代码优化功能。...混淆文件点击原文查看吧。 随后我们继续打包,查看混淆、资源压缩 Apk 大小以及部分变化: ? dex 从 3 个降低到 2 个。...R8 每次运行时都会创建一个 mapping.txt 文件,其中列出了混淆类、方法和字段名称与原始名称映射关系。此映射文件还包含用于将行号映射回原始源文件行号信息。...点击 ReTrace: ? 这块步骤如下: 导入 Mapping 文件 将混淆错误日志拷贝黏贴到 Obfuscated stack trace 中 点击右下角 ReTrace

82920

Duang~ Android堆栈慘遭毁容?精神哥揭露毁容真相!

那是因为,你代码编译姿势不对! 有经验童鞋应该会发现,开发阶段上报BuglyCrash崩溃堆栈都是有源码及行号,但发布就变成了Unknown Source,为什么?...如图3所示,我们发布时源码信息会先经过javac编译,再经过proguard混淆,才被打包进发布apk中,最终Crash崩溃Bugly获取到堆栈中有木有源码及行号就要看这两步了。 ?...下面是使用不同编译方法时保存源文件名及行号解决方法示例。 命令行javac编译解决方法 javac -g:{lines,source} XXX.java 使用Ant编译解决方法 ?...使用Eclipse编译解决方法 ?...跟着精神哥这篇文章把原文件名和行号补上,绝大部分堆栈问题都可以被解决了! 那么堆栈问题就没了吗?有人曾问我:堆栈里显示A方法调用了D方法,跟着D方法崩溃了,但实际查看代码A并没有调用D方法啊?

1.3K50
  • Android插件化、热补丁中绕不开ProGuard

    Retrace 经过ProGuard处理字节码运行堆栈已经跟没有处理之前不一样了,除了出现名称上变化还伴随着逻辑上变化,程序崩溃,开发者需要借助Retrace将错误堆栈恢复为没有经过ProGuard...mapping用途 retrace使用mapping文件和stacktrace进行ProGuard前堆栈还原。 使用-applymapping配合mapping文件进行增量混淆。...使用-applymapping参数时过程可简略分为mapping复用、名称混淆混淆名称冲突处理三部分。...行号规则简化如下: (被内联方法代码行数+1000/1000)x1000x内联发生次数+offset,offset为被内联起始行号。...规则混写会导致配置错误-optimizations !code/** method/**,只允许使用肯定或者或者否定规则,!号为否定规则。

    1.6K60

    微信Android增量Proguard方案

    图5 Proguard + D8 图6 R8R8出现之前,Proguard基本上配合Dx/D8使用,生成更小更快Java字节码,然后交给Dx/D8生成Dalvik字节码【图5】,其中D8 比...对于微信,我们仍然使用Proguard,主要原因如下: Proguard优化项跟R8相似,R8在这方面没有明显优势; Build Time R8 不比 Proguard快多少,在图1基础上采用R8方案则会快...Patch大小也有一定帮助,有了自己Dex优化,在将来一段时间内我们仍然使用Proguard,这是主要原因; 下面重点介绍增量混淆核心工作: 增量混淆  先来看一下Proguard大致输入输出流程...Apk,阅读retrace解析流程,我们顺利地将上次构建mapping.txt进行结构化解析,再对已经标记待处理output classes/fields/methods/annotation/code...通过corrector字节码状态信息,也需要同步更新usase/mapping结构化数据,并Print到当前usage和mapping产出文件中【图27】;

    2.3K20

    android混淆那些坑

    混淆(Obfuscate):使用a、b、c、d这样简短而无意义名称,对类、字段和方法进行重命名。 预检(Preveirfy): 在java平台上对处理代码进行预检。...retrace.jar使用 使用retrace.jar有几种方式: 1,通过命令行执行”java -jar + java -jar retrace.jar mapping_file java...主要有三步骤: 基本混淆 # 代码混淆压缩比,在0~7之间,默认为5,一般不下需要修改 -optimizationpasses 5 # 混淆时不使用大小写混合,混淆类名为小写 # windows下同学还是加入这个选项吧...,混淆就会生成映射文件 # 包含有类名->混淆类名映射关系 # 然后使用printmapping指定映射文件名称 -verbose -printmapping priguardMapping.txt...-dontwarn org.apache.**。

    3.2K60

    深入探索 Android 包瘦身(上)

    混淆就是对发布出去程序进行重新组织和处理,使得处理代码与处理前代码完成相同功能,而混淆代码很难被反编译,即使反编译成功也很难得出程序真正语义。...R8 优化实战 接下来,我们就来看看 Awesome-WanAndroid 使用 R8 ,APK 体积变化,如下图所示: ?...可以看到,相较于仅使用混淆 APK 而言,大小减少了 0.1MB,Dex 部分优化效果大概为 5%,APK 整体压缩效果也有 1.5% 左右。...虽然从减少 APK 大小来看,0.1MB 很少,但是比例并不小,如果你负责是一个像微信、淘宝等规模 App,它们体积一般都将近 100MB,使用 R8 也能减小 1.5MB 大小。...debugItem,同时又能让 crash 上报时候能拿到正确行号呢?

    2K30

    Android Studio 4.2 现已发布!

    此外,我们还向现有功能 ( Database Inspector [数据库检查器]、System Trace、SafeArgs 支持、Apply Changes、新项目向导等) 做出了一系列优化。...在此版本中,我们做出了一些新优化。新增了离线模式,这样您在进程中断后仍可以保持对应用数据库检查,更易于在应用崩溃对其做出诊断。同时我们也添加了一项便捷查询历史记录选项。...△ 使用 Database Inspector 查询历史记录 Retrace 命令行工具 - 作为应用编译流程一部分,R8混淆 Kotlin 和 Java 编程语言 代码。...为了减少应用内存占用量,其混淆并缩短了类型和方法名称,使得堆栈轨迹无法解码。...Retrace 命令行工具会对这些名称做去混淆处理并使用 mapping.txt 文件恢复内联框架,以再次使得堆栈轨迹易于理解。您可前往 .

    1.5K20

    Android开发:请你吃一顿史上最全Android混淆大餐

    这两个属性都接受逗号分隔资源名称列表。同样,我们可以使用字符 * 作为通配符。: <?xml version="1.0" encoding="utf-8"?...系统为我们提供了 retrace 工具,结合上文提到 mapping.txt 文件,就可以将混淆崩溃堆栈追踪信息还原成正常情况下 StackTrace 信息。...选择 ReTrace 栏 ,并添加我们项目中混淆生成 mapping.txt 文件所在位置,然后将我们混淆崩溃信息复制到 Obfuscated stack trace 那一栏,点击 ReTrace...ImageSelectActivity.k 是我们混淆方法名,ImageSelectActivity.initView 则是最初未混淆方法名,借助于 ReTrace 工具帮助,我们就可以像以前一样很快定位到崩溃代码区域了...通过 retrace 命令行 我们先要将崩溃信息复制到 txt 格式文件(:proguard_stacktrace.txt)中保存,然后执行以下命令即可(MAC系统): retrace.sh -

    4.5K30

    使用 R8 压缩您应用

    有了 R8 编译器,您可以通过压缩、混淆和优化,更全面的缩小应用体积。 本文我们将对 R8 特性进行一个简要介绍,并介绍可预期代码缩减程度以及如何在 R8 中启用这些功能。...,选择性内联,移除未使用参数和类合并来优化代码大小; 重命名标识,即混淆处理 : 使用短名称以及缩短包命名空间; 减少调试信息 : 规范化调试信息并压缩行号信息。...greeting 方法是在运行时被调用,因此跟踪在此处停止。 跟踪完成R8 使用摇树优化来删除未使用代码。...在此示例中,摇树删除了未使用方法,因为 R8 跟踪过程检测到从任何已知入口都无法到达该方法。 接下来,R8 将标识重命名为较短名称,这些名称在 DEX 文件中占用较少空间。...; } } 您所见,处理代码比原始代码短得多。

    1.3K30

    一篇文章带你领略Android混淆魅力

    这两个属性都接受逗号分隔资源名称列表。同样,我们可以使用字符 * 作为通配符。: <?xml version="1.0" encoding="utf-8"?...系统为我们提供了 retrace 工具,结合上文提到 mapping.txt 文件,就可以将混淆崩溃堆栈追踪信息还原成正常情况下 StackTrace 信息。...选择 ReTrace 栏 ,并添加我们项目中混淆生成 mapping.txt 文件所在位置,然后将我们混淆崩溃信息复制到 Obfuscated stack trace 那一栏,点击 ReTrace...ImageSelectActivity.k 是我们混淆方法名,ImageSelectActivity.initView 则是最初未混淆方法名,借助于 ReTrace 工具帮助,我们就可以像以前一样很快定位到崩溃代码区域了...2.通过 retrace 命令行 我们先要将崩溃信息复制到 txt 格式文件(:proguard_stacktrace.txt)中保存,然后执行以下命令即可(MAC系统): retrace.sh

    95920

    Android混淆你了解多少?

    这两个属性都接受逗号分隔资源名称列表。同样,我们可以使用字符 * 作为通配符。 : <?xml version="1.0" encoding="utf-8"?...系统为我们提供了 retrace 工具,结合上文提到 mapping.txt 文件,就可以将混淆崩溃堆栈追踪信息还原成正常情况下 StackTrace 信息。...栏 ,并添加我们项目中混淆生成 mapping.txt 文件所在位置,然后将我们混淆崩溃信息复制到 Obfuscated stack trace 那一栏,点击 ReTrace!...ImageSelectActivity.k 是我们混淆方法名,ImageSelectActivity.initView 则是最初未混淆方法名,借助于 ReTrace 工具帮助,我们就可以像以前一样很快定位到崩溃代码区域了...通过 retrace 命令行 我们先要将崩溃信息复制到 txt 格式文件(:proguard_stacktrace.txt)中保存,然后执行以下命令即可(MAC系统): retrace.sh -verbose

    1.8K00

    Android微信客户端是如何支持R8构建

    使用Proguard构建 说明: Proguard生成优化java字节码,包括提供混淆代码能力; 在打Patch apk时,利用ProguardApplyMapping能力保证前后构建代码混淆结果一致...开启R8 可见R8省去了dex环节直接将java字节码生成dalvik字节码,由于在Android微信我们大部分发版都是基于Tinker patch方式进行,因此接入R8之后必须提供applymapping...,改动较大,不利于长期维护; 了解到R8在优化行信息时,R8 现在可以使用基于指令偏移量行表来对共享调试信息对象中信息进行编码。...如果使用minsdk 26 或更高版本进行编译,并且没有源文件信息,R8 会完全删除行号信息。...为此我们采用了方案3解决思路,也是顺应了未来低端机型不断被淘汰大趋势,将R8行号优化改为基于指令偏移量行表方式: 「5.

    2.1K160

    Android 代码混淆 混淆方案

    使用上文配置进行混淆打包在/build/outputs/mapping/release/目录下会输出以下文件: dump.txt 描述APK文件中所有类内部结构 mapping.txt...点击 ReTrace,选择该混淆包对应 mapping 文件(混淆在 /build/outputs/mapping/release/ 路径下会生成 mapping.txt...文件,它作用是提供混淆前后类、方法、类成员等对照表),再将 crash stack trace 黏贴进输入框中,点击右下角 ReTrace混淆堆栈信息就显示出来了。...以上使用 GUI 程序进行操作,另一种方式是利用该路径下 retrace 工具通过命令行进行反解,命令是 retrace.bat|retrace.sh [-verbose] mapping.txt [...最后附上一个我在实际项目中混淆方案 proguard-android.txt文件内容 # 代码混淆压缩比,在0~7之间 -optimizationpasses 5 # 混合时不使用大小写混合,混合类名为小写

    2.6K30

    Android 混淆那些事儿

    为了避免我们劳动成果被窃取,也避免出现安全漏洞和隐患,此篇文章从混淆原理到代码和资源文件混淆实践做一下阐述。 混淆前: ? 混淆: ?...解码混淆堆叠追踪 使用混淆,一定要保存好mapping文件,程序csh时通过脚本进行解码。...下图为使用命令行最简单方法生成资源混淆apk,下载github工程,进入tool_output文件夹,试验apk为test.apk java -jar AndResGuard-cli-1.2.3....jar test.apk 混淆过程中会输出log,混淆后会出现和apk同名文件夹,里面包含了混淆mapping对应文件,新签名打包apk和混淆资源文件目录。...混淆前资源文件: ? 混淆资源文件: ? 可以看到资源文件路径以及文件名都被混淆了。

    3.2K50

    Android 混淆是啥玩意儿?

    混淆优缺点 优点: 代码混淆阅读性降低,反编译破译程序难度提高 混淆字节数减少,减少了应用体积 缺点: 混淆,测试不充分可能导致某些功能不能使用 混淆只能提高反编译门槛,并不能完全做到代码安全...如上文所说混淆缺点,部分功能混淆可能不正常 解决方法: 一轮测试尽可能使用混淆包测试; 与开发沟通有新混淆规则时,重点测试; 回归测试必须使用混淆包测试; 混淆应用产生崩溃时,崩溃log也是混淆...log: Android SDK 默认提供了混淆解析工具,可分别使用命令行和GUI两种方式解析,工具位置:\tools\proguard\bin 解析日志时,需要release打包同时生成...“ReTrace” 在上面的Mapping file中选择你mapping文件,在下面输入框输入要还原代码。...点击右下方ReTrace!” ? 如此,就可以给开发提供一份完整崩溃log了

    1.7K41

    ProGuard 在 Android 上使用姿势

    ProGuard 除了可以大幅减少代码空间之外,还可以让所有的标识符(包、类和成员)都使用更短名字, a.A 和 a.a.B。这个过程就是混淆。...当一些类和方法会被动态访问到时(使用反射),在某些情况下,ProGuard 在构建调用图时不能正确决定他们「生死」,导致这些代码被错误移除掉。...否则太难去定位问题了,因为名字都混淆过了。 ? 上传 APK 对应 ProGuard 映射文件至 Google Play 控制台,从而获得混淆堆栈信息。...这样的话当您看 ANRs & crashes 页面时,上报堆栈都会现实真实类名、方法名和行号而不是缩短混淆那些。...开启 ProGuard 可能一开始会比较困难,但是我个人认为这些代价是值得。只要投入一点点时间,您将会获得一个轻量、优化应用。

    2.6K40

    Bugly使用篇之Java错误堆栈还原

    前言 前面介绍了 Android混淆代码错误堆栈还原,相信大家已经知道如何通过Retrace在本地进行混淆代码还原了,上一篇提到,如果崩溃异常很多,你总不能一个一个去手动还原吧,不觉得这样做很没有效率么...没错,Bugly就是这样一个平台,可以很方便快捷实现你这样需求,能帮助到你提高开发效率,更加敏捷。本篇文章就跟大家分享如何使用Bugly进行错误堆栈还原。...集成Bugly 关于如何集成Bugly SDK这里不详细说明,可以到官网查看我们SDK使用指南。 前面我也写过一篇文章快速集成Bugly Android SDK,可以参考下。....**{*;} # 保留源文件名及行号 -keepattributes SourceFile,LineNumberTable mapping文件 Android混淆代码错误堆栈还原,这篇文章已经说过...总结 对代码进行混淆可以减少被破解风险,也能达到对代码优化作用,但如果发生了崩溃了就比较难定位问题,不过android中可以通过mapping文件进行反推,人工来做这件事的话会比较费时,所以使用Bugly

    2.1K30

    【Android 安全】DEX 加密 ( Proguard 混淆 | 将混淆报错信息转为原始报错信息 | retrace.bat 命令执行目录 | 暴露更少信息 )

    文章目录 一、将混淆报错信息转为原始报错信息 二、retrace.bat 命令执行目录 三、暴露更少信息 更多 ProGuard 混淆配置参考 : https://www.guardsquare.com.../en/products/proguard/manual/usage 一、将混淆报错信息转为原始报错信息 ---- 前提 : proguard-rules.pro 混淆配置中配置保留行数 ; # 保留行数...-keepattributes SourceFile,LineNumberTable 混淆报错信息 : 2020-11-10 12:01:59.426 28142-28142/?...RuntimeInit.java:513) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055) 将上述混淆报错信息...工具 ; 使用上述 retrace.bat 命令 , 通过 Proguard 混淆映射文件 mapping.txt , 还原被混淆 报错信息 ; 进入 D:\001_Programs\001_Android

    69800

    读懂 Android 中代码混淆

    希望可以帮助大家更好学习和使用代码混淆。...哪些不应该混淆 反射中使用元素 如果一些被混淆使用元素(属性,方法,类,包名等)进行了混淆,可能会出现问题,NoSuchFiledException或者NoSuchMethodException等...因为这两种情况下,混淆可以感知外界对filed引用,已经在调用出替换成了混淆名称。...四大组件不建议混淆 Android中四大组件我们都很常用,这些组件不能被混淆原因为 四大组件声明必须在manifest中注册,如果混淆类名更改,而混淆类名没有在manifest注册,是不符合Android...混淆带来了很多好处,但是也会导致我们收集到崩溃stacktrace变得更加难以读懂,好在有补救措施,这里就介绍一个工具,retrace,用来将混淆stacktrace还原成混淆之前信息. retrace

    1.5K20
    领券