Ich verwende derzeit eine Android-Bibliothek, die viel Reflexion verwendet.Proguard: Wie kann verhindert werden, dass ein ganzes Paket schrumpft (und verschleiert), um zu vermeiden, dass "unbenutzte Methoden" entfernt (und verschleiert) werden?
Sobald ich Proguard aktivieren, und es ausführen ... es stürzt ab.
Warum? Es wird viel Reflexion verwendet und die Methoden werden nur über Reflektion aufgerufen, so dass sie von proguard als unbenutzt erkannt und während des Schrumpfprozesses entfernt werden, so dass eine NoSuchMethodError
geworfen wird.
Warum das passiert? Das ist einfach, herauszufinden sie während des Schrumpfprozesses entfernt werden als proguard hält sie ungenutzt sind und entfernt daher, dass Teile des Codes (alle Methoden)
So wie kann ich proguard konfigurieren zu vermeiden Schrumpfen oder Verschleiern ein ganzes Paket? (die Bibliothek)
Hinweis: Ich möchte die Option -dontshrink nicht verwenden, da es alles oder nichts ist und ich nur ein bestimmtes Paket vermeiden möchte.
Weitere Informationen:
Der Laufzeitfehler ist die folgende:
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.my.app.debug, PID: 3771
java.lang.NoSuchMethodError: observeValueForKeyPath [class java.lang.String, class java.lang.Object, class com.my.lib.util.Dictionary, class java.lang.Object]
at com.my.lib.util.Observable$ObservationManager$Observer.<init>(SourceFile:47)
at com.my.lib.util.Observable$ObservationManager$Observer.<init>(SourceFile:26)
at com.my.lib.util.Observable$ObservationManager.addObserver(SourceFile:159)
...
Beachten Sie, dass das Problem einer eine innere innere Klasse ist ...
Mein aktueller Konfiguration hat etwas wie:
-keep,includedescriptorclasses class com.my.** { *; }
-keepclassmembers class com.my.lib** { *; }
-keep,includedescriptorclasses class com.my.lib.util.Observable$* { *; }
-keep,includedescriptorclasses class com.my.lib.util.Observable$*$* { *; }
Aber das vermeidet offenbar nur die Verschleierung der Methoden, die nicht während des Schrumpfprozesses entfernt wurden ... Ich muss vermeiden, Methoden während des Schrumpfens zu entfernen.
Mögliches Duplikat von [Wie zu halten/einen bestimmten Paket Pfad auszuschließen, wenn proguard mit?] (Http://stackoverflow.com/questions/4830474/how-to-keep-exclude-a-particular-package -path-when-using-proguard) – Elltz
Es ist kein Duplikat.Ich suche speziell nach einer Möglichkeit, Schrumpfung zu deaktivieren, die die andere Antwort nicht löst (und die Verschleierung, die die andere Antwort tatsächlich beantwortet). – neteinstein
Warum ist das globale -tonshrink so schrecklich. Brauchst du ** deine App geschrumpft? Ist das Schrumpfen den Schmerz wert, den es gerade verursacht? –