【问题标题】:howto in eclipse debug the Proguard obfuscated apk file如何在 Eclipse 中调试 Proguard 混淆的 apk 文件
【发布时间】:2011-11-15 12:46:15
【问题描述】:

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

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

我现在使用 debug.keystore 对 apk 文件进行签名,并使用默认密码“android”。
有人说我应该在我的应用程序标签中设置 android:debuggable="false" Proguard 在 Eclipse 中混淆了我的调试会话。

这样对吗?
任何帮助都会很高兴

Proguard Android Developer page 上我找不到这样做的方法

“当你的混淆代码输出堆栈跟踪时,方法名称被混淆,这使得调试哈”

什么“堆栈跟踪”以及来自哪里?

在页面Proguard Manual我找不到解释

【问题讨论】:

  • 不确定这是否正确,我将 Android 应用程序的签名(debug.keystore)应用程序导出到“bin”文件夹并在那里替换应用程序文件。我按 F11,看起来它即将开始调试会话。然而,消息“等待调试器”不会消失。清单 debuggable=true 和权限 android.permission.SET_DEBUG_APP 在那里。这是这样做的方法吗?
  • 我正在将 Android 应用程序的签名 (debug.keystore) 应用程序导出到“bin”文件夹并在那里替换应用程序文件。我按 F11,我只能在模拟器上运行 apk。现在,在 LogCat 中,我看到了正常的异常。这是否意味着我正在调试混淆的 apk?

标签: android proguard


【解决方案1】:

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

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

【讨论】:

  • Grrrrrr8 将 Calderwood:)
【解决方案2】:

不在 Eclipse 中。

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

【讨论】:

    【解决方案3】:

    经过研究,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。

    【讨论】:

    • 如果您不想自己编写异常处理程序,请使用第三方的、久经考验的错误报告 Java 库,例如 ACRA(有关更多信息,请参阅 here )。
    【解决方案4】:

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

    1. 从上面的路径运行上面的 GUI。
    2. 单击左侧面板底部的“ReTrace”按钮。
    3. 在“映射”中添加映射文件 (mapping.txt) 的路径 文件的文本框。
    4. 将堆栈跟踪的副本粘贴到“混淆堆栈跟踪”中 文本框。点击
    5. 右下角的“ReTrace”。

    调试愉快!

    【讨论】:

      【解决方案5】:

      获取混淆apk的步骤:

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

      2. C:\Program Files (x86)\Android\android-sdk\tools\proguard的“bin”和“lib”文件夹替换为最新下载的proguard文件夹。

      3. 检查 Eclipse 中的 SDK 位置是否有空格,然后转到 Window > Preferences > 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。

      【讨论】:

      • 问题不在于如何获取混淆的 apk,而在于如何调试。用户似乎已经这样做了(得到了混淆的 apk),并且在处理结果时遇到了问题。
      猜你喜欢
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多