【问题标题】:Proguard retrace missing line numbersProguard 回溯丢失的行号
【发布时间】:2014-01-11 18:13:04
【问题描述】:

我正在尝试对我的 Android 应用程序中的堆栈跟踪进行去混淆处理。我在构建应用程序时使用了 proguard,并且运行回溯似乎或多或少有效。

不工作的是解码行号。输出中没有显示行号,它为每个“at”列出了几个选项。

这是我的 proguard-project.txt 文件:

-keepattributes LineNumberTable
-assumenosideeffects class android.util.Log {
    public static int v(...);
    public static int d(...);
}

这是我的堆栈跟踪:

uncaught exception
java.lang.NullPointerException
at com.myapp.myapp.dbaccess.ag.a(Unknown Source)
at com.myuapp.myapp.dbaccess.x.a(Unknown Source)
at com.myapp.myapp.dbaccess.x.a(Unknown Source)
at com.myapp.myapp.main.ab.run(Unknown Source)

这是输出:

uncaught exception
java.lang.NullPointerException
at com.myapp.myapp.dbaccess.ZNodeCache.com.myapp.myapp.dbaccess.ZNode getNodeFromCache(long)(Unknown Source)
                                             com.myapp.myapp.dbaccess.ZRoot getRootFromCache()
                                             com.myapp.myapp.dbaccess.ZNode getNodeFromDb(long,boolean)
                                             com.myapp.myapp.dbaccess.ZNode$Array getChildrenForExport(com.myapp.myapp.dbaccess.ZNode)
                                             ... many more ...
at com.myapp.myapp.dbaccess.XmlImport.com.myapp.myapp.dbaccess.XmlImport$Results importFile(java.lang.String)(Unknown Source)
                                            void _doImport(java.io.InputStream,com.myapp.myapp.dbaccess.XmlImport$Results)
                                            void importFile(java.io.InputStream)
                                            void importNode(org.xmlpull.v1.XmlPullParser,com.myapp.myapp.dbaccess.ZNode)
                                             ... many more ...
at com.myapp.myapp.dbaccess.XmlImport.com.myapp.myapp.dbaccess.XmlImport$Results importFile(java.lang.String)(Unknown Source)
                                            void _doImport(java.io.InputStream,com.myapp.myapp.dbaccess.XmlImport$Results)
                                            void importFile(java.io.InputStream)
                                            void importNode(org.xmlpull.v1.XmlPullParser,com.myapp.myapp.dbaccess.ZNode)
                                             ... many more ...
at com.myapp.myapp.main.MainActivity$3.void run()(Unknown Source)

我一定是缺少另一个配置参数;有什么想法吗?

【问题讨论】:

    标签: android proguard


    【解决方案1】:

    原来答案在 Android 文档中(信不信由你)。我想我第一次错过了它。您需要指定源文件,如下所示:

    -renamesourcefileattribute SourceFile
    -keepattributes SourceFile,LineNumberTable
    

    renamsesourcefile 属性将导致所有源文件的名称为 SourceFile(或您输入的任何名称)。 "retrace" 不关心源文件名是什么,但如果你忽略它,它会决定忽略行号。

    这在 proguard-project.txt 中,如果你使用 Android Studio,你会在“你的项目”.app 中找到它。

    【讨论】:

    • 你的回答把我带到了proguard.sourceforge.net/manual/examples.html#stacktrace,其中包含附加行-printmapping out.map
    • 您将这些行放在哪个文件中?我已经在 Android Studio 的proguard-rules.pro 文件中尝试过,但还没有出现行号。
    • 在 proguard-project.txt 中
    • 这会让试图对您的代码进行逆向工程的人更容易吗?
    • @voxoid 这里有同样的问题。那么有人对此有答案吗(4年后)?
    猜你喜欢
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多