如何在eclipse中调试Proguard混淆的apk文件

时间:2011-09-12 17:21:05

标签: android proguard

在使用Proguard并使用新密钥签名和导出后,我的应用程序崩溃了 相同的代码在普通的eclipse调试模式下工作。

我到处读到我应该使用mapping.txt找到失败的代码。 但是如何做到这一点,我现在谷歌这2小时,没有答案是有效的。

我现在用debug.keystore签署apk文件并使用默认密码“android” 有人说我应该在我的应用程序标签中使用android:debuggable =“false” Proguard在eclipse中混淆了我的调试会话。

这是对的吗? 任何帮助都会得到帮助

Proguard Android Developer page上的

我找不到办法做到这一点

“当您的混淆代码输出堆栈跟踪时,方法名称会被混淆,这会使调试成为”

什么是“堆栈跟踪”以及从何处?

在页面Proguard Manual上,我找不到解释

5 个答案:

答案 0 :(得分:8)

使用Proguard GUI可以最轻松地对堆栈跟踪进行去混淆。您可以在Android SDK中找到它。

sdk\tools\proguard\bin\proguardgui.bat
  1. 从上面的路径运行上面的GUI。
  2. 点击' ReTrace'按钮位于左侧面板的底部。
  3. 在'映射文件中添加映射文件(mapping.txt)的路径。文本框。
  4. 将堆栈跟踪的副本粘贴到“混淆堆栈跟踪”中。文本框。
  5. 点击' ReTrace'在右下角。
  6. 快乐调试!
  7. enter image description here

答案 1 :(得分:4)

一直在研究这个问题,android开发者网站上的proguard文档演示了如何解码堆栈跟踪,但它没有指定如何获取堆栈跟踪。

http://developer.android.com/guide/developing/tools/proguard.html(请参阅解码混淆堆栈跟踪一节)

我尝试使用logcat转储,如下所示: -

E/AndroidRuntime(14584): FATAL EXCEPTION: main

E/AndroidRuntime(14584): java.lang.ExceptionInInitializerError

E/AndroidRuntime(14584):    at com.a.a.b.a.dg.<init>(Unknown Source)

E/AndroidRuntime(14584):    at com.a.a.b.a.q.a(Unknown Source)

E/AndroidRuntime(14584):    at com.a.a.b.a.y.a(Unknown Source)

E/AndroidRuntime(14584):    at com.a.a.b.a.y.a(Unknown Source)

E/AndroidRuntime(14584):    at com.a.a.b.a.aq.get(Unknown Source)

E/AndroidRuntime(14584):    at com.a.a.b.cp.a(Unknown Source)

E/AndroidRuntime(14584):    at com.a.a.b.ai.c(Unknown Source)

E/AndroidRuntime(14584):    at com.a.a.b.bg.a(Unknown Source)

E/AndroidRuntime(14584):    at com.a.a.a.o.a(Unknown Source)

E/AndroidRuntime(14584):    at com.a.a.b.ee.a(Unknown Source)

E/AndroidRuntime(14584):    at com.a.a.b.ag.a(Unknown Source)

E/AndroidRuntime(14584):    at com.a.a.b.cb.a(Unknown Source)

不幸的是,这不起作用,但是如果我从每行开头删除E / AndroidRuntime(14584)它确实有效:

FATAL EXCEPTION: main
java.lang.ExceptionInInitializerError
    at com.a.a.b.a.dg.<init>(Unknown Source)
    at com.a.a.b.a.q.a(Unknown Source)
    at com.a.a.b.a.y.a(Unknown Source)
    at com.a.a.b.a.y.a(Unknown Source)
    at com.a.a.b.a.aq.get(Unknown Source)
    at com.a.a.b.cp.a(Unknown Source)
    at com.a.a.b.ai.c(Unknown Source)
    at com.a.a.b.bg.a(Unknown Source)
    at com.a.a.a.o.a(Unknown Source)
    at com.a.a.b.ee.a(Unknown Source)
    at com.a.a.b.ag.a(Unknown Source)
    at com.a.a.b.cb.a(Unknown Source)

因此,文档声明您需要堆栈跟踪文件,并且似乎没有迹象表明从设备获取有效的堆栈跟踪文件。

我看到这样做的唯一方法是提供自定义异常处理程序并将堆栈跟踪写入sdcard。

答案 2 :(得分:4)

不在Eclipse中。

在Eclipse之外,在ProGuard中使用Retrace函数。您还需要在项目的mapping.txt目录下找到转储的堆栈跟踪和proguard来反转混淆的堆栈跟踪。每次部署新版Android应用时,请务必保存mapping.txt的副本(最好在项目工作区之外)。

答案 3 :(得分:1)

对于mac用户使用下面的代码来运行 /Users/XYZ/Library/Android/sdk/tools/proguard/bin/proguardgui.sh

  1. 从上面的路径运行上面的GUI。
  2. 点击左侧面板底部的“ReTrace”按钮。
  3. 在“映射”中添加映射文件(mapping.txt)的路径 文件'文本框。
  4. 在“模糊堆栈跟踪”中粘贴堆栈跟踪的副本 文本框。点击
  5. 右下角的'ReTrace'。
  6. 快乐调试!

答案 4 :(得分:-5)

获得混淆的步骤apk:

  1. proguard site下载最新的proguard。目前的最新版本是proguard4.7

  2. 替换&#34; bin&#34;和&#34; lib&#34; C:\Program Files (x86)\Android\android-sdk\tools\proguard的文件夹,其中包含最新下载的proguard文件夹。

  3. 在eclipse中检查SDK位置,查看其中的空白区域,然后转到Window&gt;偏好&gt; Android系统。如果有空格,则将其替换为:

    c:\Progra~2\android\android-sdk (for windows 64-bit)
    c:\Progra~1\android\android-sdk (for windows 32-bit)
    
  4. 检查proguard.cfg文件是否在项目的根文件夹中,并在android项目的project.properties文件中添加proguard.config=proguard.cfg

  5. 现在导出你的项目以获得模糊的apk。