使用Android SDK还原

位置: <android sdk>/tools/proguard/bin

  • proguardgui.sh GUI工具
  • retrace.sh 命令行工具
retrace.sh -verbose mapping.txt stacktrace.txt > ./output.txt

其中-verbose代表显示返回类型以及参数类型(一般用不上)

如果你发现还原后,行号还是显示的Unknow source,无法显示行号。那么你需要在混淆文件中加入:

-keepattributes SourceFile,LineNumberTable

代表着保留源文件名及行号。

官网下载jar文件还原

ProGuard官网

下载之后,解压zip包,在<proguardx.x.x>/lib/下,有两个jar文件retrace.jarproguard.jar,使用如下命令还原

java -jar retrace.jar -verbose mapping.txt stacktrace.txt > ./output.txt

这里的-verbose含义和上面的一致。

自己写代码还原

当然,通过上面的方式下载下的zip包里除了有jar工具包,还有ProGuard的源码,你可以使用<proguardx.x.x>/retrace/src下的源码来自己使用java源码实现还原。

package com.immomo.rifle;
import java.io.File;import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;import proguard.retrace.ReTrace;public class RetraceUtil {private String stackFile;private String mapFile;private String outFile;private boolean append;public RetraceUtil(String map, String proF, String out, boolean append) {this.mapFile = map;this.stackFile = proF;this.outFile = out;this.append = append;myReTrace();}public void myReTrace() {try {File file = new File(this.outFile);//是否增量写入FileOutputStream fis = new FileOutputStream(file, this.append);PrintStream out = new PrintStream(fis);
//          sysout的print内容输出到文件System.setOut(out);ReTrace localReTrace = new ReTrace(ReTrace.STACK_TRACE_EXPRESSION, true, new File(this.mapFile), new File(this.stackFile));localReTrace.execute();out.close();fis.close();System.out.println("Retrace Done!");} catch (IOException e) {// TODO Auto-generated catch blockSystem.err.println("Retrace Erro:");System.err.println(e.getMessage());}}
}

参考:
使用Retrace还原被ProGuard混淆后的崩溃堆栈

Android ProGuard 还原堆栈相关推荐

  1. Android:如何从堆栈中还原ProGuard混淆后的代码

    本文翻译自Android: How To Decode ProGuard's Obfuscated Code From Stack Trace 本篇文章是写给那些在他们的应用中使用ProGuard并且 ...

  2. Android Proguard / ZKM 点滴记录

    简介 Java代码是非常容易反编译的.为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理. ProGuard是一个混淆代码的开源项目.它的主要作用就是混淆,当然它还能对字节码 ...

  3. [转载]关于Android ProGuard混淆学习记录

    转自:http://www.cnitblog.com/zouzheng/archive/2011/01/12/72630.aspx 前段时间把Android的工程用Ant Build搞定后,现在需要把 ...

  4. Android Proguard 不混淆所有第三方jar(忽略配置设置)

    今天给大家分享一个只混淆自己的项目代码而不混淆所有第三方jar的方法(没错,是所有的第三方都不进行混淆,无论来什么第三方,都不需要动混淆配置) 不混淆所有第三方重大突破 今天又被同事逼迫看了一下Pro ...

  5. Android - ProGuard简介

    Android - ProGuard简介 本文地址: http://blog.csdn.net/caroline_wendy 本文的合集已经编著成书,<高级Android开发强化实战>,欢 ...

  6. Android Proguard工具使用和配置详解

    Android开发中的Proguard Proguard是Android开发时经常会用到的一个工具,在Android SDK中已经集成了一个免费的Proguard版本,位于<sdk>/to ...

  7. Android ProGuard使用要点

    1.基本的的使用可以很容易百度到, 但是当你使用了android-support-v4或者android-support-v7或者android-support-v11包之后,你发现导出的时候, 警告 ...

  8. android proguard 第三方jar,Android Studio代码混淆-第三方jar混淆汇总(持续更新)

    前言 Android有非常多的优秀的第三方开源jar包,我们经常在我们的项目中使用了不少jar包,但是往往到了release的时候就忘了混淆第三方jar包了,会给我们开发带来不少麻烦,所有在这里汇总一 ...

  9. Android ProGuard使用要点!

    为什么80%的码农都做不了架构师?>>>    1.基本的的使用可以很容易百度到, 但是当你使用了android-support-v4或者android-support-v7或者an ...

  10. android+proguard目录,Android Proguard 详解

    一般的商业项目都需要对代码进行加密,Android提供了一种代码混淆方法,介绍如下: 一.简介 1.简介 混淆器通过删除从未用过的代码和使用晦涩名字重命名类.字段和方法,对代码进行压缩,优化和混淆.结 ...

最新文章

  1. MYSQL编译参数详解
  2. 扩增子统计绘图3热图:样品相关分析,差异OTU
  3. 正则表达式抓取文件内容中的http链接地址
  4. UML类图详解_泛化关系
  5. amd一点也不yes_最不值得买的高端显卡!RTX3080从真香变成了鸡肋?
  6. QlikSense移动端使用攻略
  7. (*长期更新)软考网络工程师学习笔记——Section 6 网络层上篇
  8. junit测试类叫什么名字_使用Junit测试名称
  9. opencv python教程简书_OpenCV-Python系列二:常用的图像属性
  10. 面试题,作为产品经理你是如何应对需求变更的?
  11. vue 检测ie版本_Vue2+Webpack+ES6 兼容低版本浏览器(IE9)解决方案
  12. spring session的生命周期
  13. MySQL客户端连接被频繁杀掉,企业案例(一):由于mysql sleep线程过多小故障
  14. Azure Data Science Virtual Machine Linux的初步体验
  15. 2021-2025年中国打印管理软件行业市场供需与战略研究报告
  16. IntelliJ IDEA使用技巧(二)——添加jar包
  17. UML14种图之部署图和构件图最全总结
  18. SGVision与三菱FX5UPLC通讯
  19. python根据日期生成动态密码
  20. AfterNodeInsertion方法

热门文章

  1. 《Web漏洞防护》读书笔记——第7章,访问控制防护
  2. 庖丁解牛之spring源码系列二 spring bean生命周期介绍
  3. android接收红外传感器发送的脉冲信号,怎么判断红外发送和接收管?
  4. Unity3D笔记 英保通三 脚本编写 、物体间通信
  5. bzoj1565: [NOI2009]植物大战僵尸
  6. 如何将jar包加入到Maven本地仓库
  7. SpringMVC前后台数据传递中Json格式的相互转换(前台显示格式、Json-lib日期处理)及Spring中的WebDataBinder浅析...
  8. linux如何删除密钥链接,如何在不创建新密钥的情况下删除SSH密钥的密码短语?...
  9. 关于MyBatis一级缓存、二级缓存那些事
  10. 计算机网络的简单概述以及在浏览器中输入一个网址后如何执行