android – Proguard回溯缺少行号

我正试图从我的 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.ZNode)
                                             ... many more ...
at com.myapp.myapp.main.MainActivity$3.void run()(UnkNown Source)

我必须缺少另一个配置参数;有任何想法吗?

解决方法

原来答案是在Android文档中(信不信由你).我猜我第一次错过了它.您需要指定源文件,如下所示:
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable

renamsesourcefile属性将导致所有源文件名称为SourceFile(或您放置的任何内容). “retrace”不关心源文件名是什么,但是如果你把它遗漏掉,它决定忽略行号.

这可以在proguard-project.txt中找到,如果您使用的是Android Studio,则可以在“您的项目”中找到.app.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...