【问题标题】:Android Studio: proguard line numbers wrong, not completly obfuscatingAndroid Studio:proguard 行号错误,没有完全混淆
【发布时间】: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 ... }

有什么想法吗?

【问题讨论】:

    标签: android-studio proguard


    【解决方案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 一部分的某些函数更难混淆,因为这种深层依赖关系。我希望清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 2016-12-24
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多