Android Studio:proguard行号错误,不完全混淆

时间:2016-05-12 18:38:08

标签: android-studio proguard

新:我正在寻找的主要内容是修复错误的行号。这使得几乎不可能查明各种崩溃。

在过去的某个时刻,我的程序混淆停止了正常工作,或者看起来如此。在以下日志文​​件片段中,请注意我的标识符BasicList和ImageClick正在文件中显示。然而,很明显Proguard正在运行,因为存在着目标。

其次,对于BasicList行,它显示的行号为6218.我的源文件在那么多行附近没有。需要明确的是,它也不是一个角色职位。

E/InputEventReceiver( 3814): Exception dispatching input event.
E/MessageQueue-JNI( 3814): Exception in MessageQueue callback: handleReceiveCallback
E/MessageQueue-JNI( 3814): java.lang.NullPointerException
E/MessageQueue-JNI( 3814):  at com.perinote.perinote2.BasicList.a(SourceFile:6218)
E/MessageQueue-JNI( 3814):  at com.perinote.perinote2.ae.onClick(SourceFile:266)
E/MessageQueue-JNI( 3814):  at android.view.View.performClick(View.java:4240)
E/MessageQueue-JNI( 3814):  at com.perinote.widgets.ImageClick.onTouchEvent(SourceFile:1156)
E/MessageQueue-JNI( 3814):  at android.view.View.dispatchTouchEvent(View.java:7384)
E/MessageQueue-JNI( 3814):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)

我的proguard-project.txt有以下内容

-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable

-assumenosideeffects class android.util.Log { ... stuff ... }

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

一旦我遇到一个非常类似的问题,使用异常调度输入事件,并且为了解决它,我使用以下代码添加到proguard每个文件夹中的代码:

-keep class !com.MyPackage.folderActivity { *; }

如果在添加文件夹后混淆失败,您可以使用非常相似的东西逐个类添加类:

-keep class !com.MyPackage.folderActivity.ActivityOne { *; }

一开始这是一个非常缓慢的过程,但随后很容易维护。

嗯,我希望这很有用。

答案 1 :(得分:-1)

-renamesourcefileattribute SourceFile选项告诉Proguard隐藏原始文件名并将它们显示为“SourceFile”。因此,亚麻布将被更换。

为了回溯原始堆栈跟踪,您需要通过向proguard-project.txt添加以下选项将模糊源映射到原始来源:

-printmapping mapping.txt

您有两个选项来解码混淆的堆栈跟踪:

GUI方法

  1. 打开{android-sdk} /tools/proguard/bin/proguardgui.bat
  2. 选择左栏
  3. 上的“ReTrace”选项
  4. 添加映射文件和模糊堆栈跟踪
  5. 点击“ReTrace!”
  6. CLI方法

    1. 将混淆的堆栈跟踪放在文本文件中(例如:stacktrace.txt)
    2. 将mapping.txt和stacktrace.txt复制到/ tools / proguard / bin
    3. 在Windows上,在与文件相同的目录中运行以下命令:retrace.bat -verbose mapping.txt stacktrace.txt> out.txt
    4. out.txt将使堆栈跟踪去混淆
    5. 您可以找到更详细的解释here

      希望它有所帮助。 欢呼声。