在使用Proguard并使用新密钥签名和导出后,我的应用程序崩溃了 相同的代码在普通的eclipse调试模式下工作。
我到处读到我应该使用mapping.txt找到失败的代码。 但是如何做到这一点,我现在谷歌这2小时,没有答案是有效的。
我现在用debug.keystore签署apk文件并使用默认密码“android” 有人说我应该在我的应用程序标签中使用android:debuggable =“false” Proguard在eclipse中混淆了我的调试会话。
这是对的吗? 任何帮助都会得到帮助
Proguard Android Developer page上的我找不到办法做到这一点
“当您的混淆代码输出堆栈跟踪时,方法名称会被混淆,这会使调试成为”
什么是“堆栈跟踪”以及从何处?
在页面Proguard Manual上,我找不到解释
答案 0 :(得分:8)
使用Proguard GUI可以最轻松地对堆栈跟踪进行去混淆。您可以在Android SDK中找到它。
sdk\tools\proguard\bin\proguardgui.bat
答案 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
快乐调试!
答案 4 :(得分:-5)
从proguard site下载最新的proguard。目前的最新版本是proguard4.7
替换&#34; bin&#34;和&#34; lib&#34; C:\Program Files (x86)\Android\android-sdk\tools\proguard
的文件夹,其中包含最新下载的proguard文件夹。
在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)
检查proguard.cfg文件是否在项目的根文件夹中,并在android项目的project.properties文件中添加proguard.config=proguard.cfg
。
现在导出你的项目以获得模糊的apk。