首页
学习
活动
专区
工具
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!

85220

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

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

1.4K50
  • 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 R8 在R8出现之前,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.3K60

    深入探索 Android 包瘦身(上)

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

    2.1K30

    Android Studio 4.2 现已发布!

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

    1.6K20

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

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

    5.2K30

    使用 R8 压缩您的应用

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

    1.4K30

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

    这两个属性都接受逗号分隔的资源名称列表。同样,我们可以使用字符 * 作为通配符。如: 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

    97320

    Android混淆你了解多少?

    这两个属性都接受逗号分隔的资源名称列表。同样,我们可以使用字符 * 作为通配符。 如: 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.9K01

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

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

    2.4K160

    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.7K30

    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.3K50

    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

    77300

    读懂 Android 中的代码混淆

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

    1.6K20
    领券