2014-01-11 106 views
6

我想從我的Android應用程序中去除堆棧跟蹤。我在構建應用程序時使用了proguard,並且運行回溯似乎可以工作,或多或少。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) 

我必須缺少另一個配置參數;有任何想法嗎?

回答

23

原來的答案在Android文檔中(不管你信不信)。我想我第一次錯過了它。您需要指定的源文件,像這樣:

-renamesourcefileattribute SourceFile 
-keepattributes SourceFile,LineNumberTable 

的renamsesourcefileattribute將導致所有的源文件有名字的SourceFile(或任何你把)。 「回溯」不關心源文件名是什麼,但是如果你將其忽略掉,它會決定忽略行號。

這個在proguard-project.txt裏面,如果你使用的是Android Studio,你會在「你的項目」中找到.app。

+2

您的答案讓我知道http://proguard.sourceforge.net/manual/examples.html#stacktrace包含額外的行-printmapping out.map – Mick

+0

您在哪些文件中放置了這些行?我曾在Android Studio的'proguard-rules.pro'文件中嘗試過,但行號尚未出現。 – codelearner

+0

在proguard-project.txt中 –