2016-05-12 8 views
6

NEU: die Hauptsache, die ich suche, ist eine Lösung für die falschen Zeilennummern. Das macht es nahezu unmöglich, verschiedene Abstürze festzustellen.Android Studio: proguard Zeilennummern falsch, nicht komplett verschleiern

Irgendwann in der Vergangenheit hörte meine Proguard-Verschleierung auf zu funktionieren, oder so scheint es. Beachten Sie im folgenden Protokolldateiausschnitt, dass meine Bezeichner BasicList und ImageClick in der Datei angezeigt werden. Aber es ist klar, dass Proguard läuft, da es Objek- tive gibt.

Zweitens, für die BasicList-Zeile, zeigt es eine Zeilennummer von 6218. Meine Quelldatei hat keine wo in der Nähe, dass viele Zeilen. Um es klar zu sagen, es ist auch keine Charakterposition.

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) 

Mein proguard-project.txt hat folgende

-renamesourcefileattribute SourceFile 
-keepattributes SourceFile,LineNumberTable 

-assumenosideeffects class android.util.Log { ... stuff ... } 

Irgendwelche Ideen?

Antwort

0

Die Option -renamesourcefileattribute SourceFile weist Proguard an, die ursprünglichen Dateinamen zu verbergen und sie nur als "SourceFile" anzuzeigen. Daher werden die Leinennummern geändert.

Um den ursprünglichen Stack-Trace Sie, indem Sie die folgende Option zu Ihrem proguard-project.txt die verschleierten Quellen zu den ursprünglichen Quellen abzubilden müssen zurückzuverfolgen:

-printmapping mapping.txt 

Sie haben zwei Möglichkeiten, den verschleierten Stapel zu dekodieren Spur:

GUI Methode

  1. Öffnen {android-sdk}/tools/proguard/bin/pro guardgui.bat
  2. Wählen Sie den „Retrace“ Option auf der linken Spalte
  3. Fügen Sie Ihre Mapping-Datei und verschleierten Stack-Trace
  4. Klicken Sie auf „Retrace“

CLI Methode

  1. Setzen Sie Ihre verschleierten Stack-Trace in eine Textdatei (zB: stacktrace.txt)
  2. Kopieren Sie Ihre Mapping.txt und stacktrace.txt in/tools/progard/bin
  3. Führen Sie unter Windows den folgenden Befehl im selben Verzeichnis wie die Dateien aus: retrace.bat -verbose mapping.txt stacktrace.txt> out .txt
  4. out.txt wird der Stack-Trace de-verschleierten haben

Sie können eine ausführlichere Erklärung finden here

Hoffe, es hilft. Prost.

+0

Sorry, das hilft nicht. Das grundlegende Problem ist, dass die Zeilennummern falsch sind. Das gesamte Mapping funktioniert mit den Symbolen, tut aber nichts mit Zeilennummern. –

0

Einmal hatte ich ein sehr ähnliches Problem, mit dem Ausnahme Dispatching Eingangsereignis, und für sie zu lösen, ging ich das Hinzufügen jeden Ordner mit dem Code ProGuard, mit dieser Linie:

-keep class !com.MyPackage.folderActivity { *; } 

Bei

-keep class !com.MyPackage.folderActivity.ActivityOne { *; } 

am Anfang ist es ein sehr langsamer Prozess, aber dann es ist leicht zu pflegen: dass die Verschleierung nach einem Ordner hinzufügen, schlug fehl, können Sie Klasse von Klasse von demselben Ordner mit etwas sehr ähnliches hinzuzufügen.

Nun, ich hoffe, das ist nützlich.

+0

Mein Verständnis von "keep" ist, dass es proguard anweist, den Code nicht aus der App zu entfernen, was er tun wird, wenn er feststellt, dass der Code nicht verwendet wird. Ich bin mir nicht sicher, was das mit Zeilennummern zu tun haben würde. Wenn ich das nächste Mal Log-Ausgaben mit schlechten Zeilennummern finde, werde ich das versuchen. Wenn es funktioniert, werde ich Ihnen gerne die richtige Antwort geben! –

+0

Sie haben Recht, aber das "!" Signal ist einer der Wildcards von Proguard, der als Negator arbeitet. In diesem Fall sagt es zu progard, die gegenteilige Aktion auszuführen und nur diesen Ordner oder diese Aktivität zu verschleiern. Dies kann für Sie nützlich sein, um herauszufinden, welche Klasse zu viele Abhängigkeiten aufweist, die den Fehler bei Zeilen mit hoher Nummer verursachen. Auf diesem Link können Sie weitere Wildcards überprüfen: https://stuff.mit.edu/afs/sipb/project/android/sdk/android-sdk-linux/tools/proguard/docs/index.html#manual/usage.html – ZLNK

+0

Was meinen Sie mit einer "Klasse hat zu viele Abhängigkeiten"? –