新:我正在寻找的主要内容是修复错误的行号。这使得几乎不可能查明各种崩溃。
在过去的某个时刻,我的程序混淆停止了正常工作,或者看起来如此。在以下日志文件片段中,请注意我的标识符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 ... }
有什么想法吗?
答案 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方法
CLI方法
您可以找到更详细的解释here
希望它有所帮助。 欢呼声。