2016-11-25 7 views
0

ich lief proguard auf meinem Projekt, aber es verschleiert meinen Aktivitätsnamen nicht. Ich habe mehrere Regeln ausprobiert und es funktioniert nicht. Ich weiß nicht, was genau es zum Beispiel bedeutet, dass die Regel unter:Proguard Verschleierung funktioniert nicht auf Aktivitäten?

-keep public class models.* { 
    *; 
} 

und was ist der Unterschied zwischen

-keepclassmembers class * { 

}

und

-keepclasseswithmembers class * { 

} 

Ich habe Schwierigkeiten auf Wie funktionieren diese Regeln? bitte hilfe.

+0

soweit ich weiß, kann ProGuard arbeiten nur auf Java-Code (nicht auf dem XML), so dass, wenn sie die Aktivität Namen verschleiern, wäre es mit dem Manifest vermasseln. Also vielleicht Android-Plugin automatisch einige Regeln hinzufügen, um nicht die manifest deklarierten Sachen, die wir Entwickler nicht mit durcheinander bringen. All dies ist nur Annahme und Schlussfolgerung, keine tatsächliche informierte Antwort. – Budius

Antwort

2

Während des Buildprozesses überprüft Proguard das AndroidManifest und behält alle Aktivitätsklassen bei. Dies wird benötigt, damit Ihre App ausgeführt werden kann. Sie sollten Klassen nicht verschleiern, die android.app.Activity erweitern.


See:

Why Proguard keeps Activity class in Android?

Why proguard processes AndroidManifest.xml


was ist der Unterschied zwischen ... keepclassmembers und ... keepclasseswithmembers

Gemäß der Dokumentation:

-keepclassmembers

Gibt Klassenmitglieder erhalten werden, wenn ihre Klassen als gut erhalten sind. Beispielsweise möchten Sie möglicherweise alle Serialisierung Felder und Methoden von Klassen, die die Schnittstelle Serializable implementieren.

-keepclasseswithmembers

Gibt Klassen und Klassenmitglieder erhalten werden, unter der Bedingung, , die alle angegebenen Klasse Mitglieder anwesend sind. Beispielsweise möchten Sie möglicherweise alle Anwendungen behalten, die eine Hauptmethode haben, ohne sie explizit aufzulisten.

See: http://proguard.sourceforge.net/manual/usage.html

Verwandte Themen