Android Studio:proguard 行号错误,没有完全混淆
Posted
技术标签:
【中文标题】Android Studio:proguard 行号错误,没有完全混淆【英文标题】:Android Studio: proguard line numbers wrong, not completly obfuscating 【发布时间】:2016-09-08 18:18:39 【问题描述】:新: 我正在寻找的主要内容是修复错误的行号。这使得查明各种崩溃几乎是不可能的。
在过去的某个时候,我的 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 ...
有什么想法吗?
【问题讨论】:
【参考方案1】:一旦我遇到了一个非常相似的问题,异常调度输入事件,为了解决这个问题,我使用以下代码添加了proguard每个文件夹:
-keep class !com.MyPackage.folderActivity *;
如果添加文件夹后混淆失败,您可以使用非常相似的方法逐类添加同一文件夹的类:
-keep class !com.MyPackage.folderActivity.ActivityOne *;
一开始这是一个非常缓慢的过程,但之后很容易维护。
好吧,我希望这很有用。
【讨论】:
我对“keep”的理解是它指示proguard不要将代码从应用程序中剥离出来,如果它发现代码未被使用就会这样做。我不确定这与行号有什么关系。但是,下次我发现行号错误的日志输出时,我会试试这个。如果它有效,我很乐意奖励你正确的答案! 你是对的,但是“!” signal 是 proguard 的通配符之一,用作否定符,因此,在这种情况下,它表示 proguard 执行相反的操作,仅混淆该文件夹或活动。这对您很有用,可用于查找哪个类具有过多的依赖项,从而导致高数行错误。在此链接上,您可以查看更多通配符:stuff.mit.edu/afs/sipb/project/android/sdk/android-sdk-linux/… 对不起,回答迟了,举个例子:假设您双击函数“performClick”,这将向您显示代码(来自api),其中实现了该函数一类。此类具有其他依赖项(从同一 api 导入另一个类)。在少数情况下,我发现作为 api 一部分的某些函数更难混淆,因为这种深层依赖关系。我希望清楚。以上是关于Android Studio:proguard 行号错误,没有完全混淆的主要内容,如果未能解决你的问题,请参考以下文章
android - android studio中的proguard错误
如何在android studio中启用proguard? [复制]
Android Studio & ProGuard:无法解析符号 getDefaultProguardFile?
Proguard 在 android Studio 中开箱即用?这是啥意思?