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 中开箱即用?这是啥意思?

使用 Android Studio 签署 APK 时出现 Proguard 错误

Android Studio - Proguard“保留”规则被忽略?