2016-11-21 4 views
0

Die App Abhängigkeit von Bibliothek, die Mitglieder der Klasse mitProGuard halten die Teilnehmer mit „ungenutzt“ Anmerkung

@SuppressWarnings("unused") 

Anmerkung hat. Als ich den Einsatz von proguard-rules.pro durch gemacht,

minifyEnabled true 

in gradle Datei werden die Mitglieder mit über Anmerkungen zur Laufzeit nicht gefunden, mit

NoSuchFieldError error. 

Wie aus dieser Bibliothek die Mitglieder halten Paket mit Annotations

@SuppressWarnings("unused") 

durch

"proguard-rules.pro" 
+0

haben Sie die Klasse Paketnamen? –

+0

@masoudvali Ja, es hat den Namen des Klassenpakets, aber das ist Teil des Projekts. – Annada

+0

http://stackoverflow.com/questions/31607727/keep-method-name-from-obfuscator-proguard# hinzufügen @ Keep – muziling

Antwort

0

versuchen, für die bestimmte Klasse so etwas wie diese verwenden Sie verwenden:

-dontwarn {package name}.{class name} 
-keep class {package name}.{class name} { *; } 
-keep interface {package name}.{class name} { *; } 
+0

Danke für Ihren Vorschlag. Eigentlich möchte ich diejenigen Klassenmitglieder behalten, die mit @SuppressWarnings ("unused") kommentiert sind. Jedenfalls werden andere Methoden nicht durch Verschleierung entfernt. 1. Behalten Sie Methoden bei, die mit @SuppressWarnings ("unused") gekennzeichnet sind. 2. Verschleiern Sie auch diese Methoden in Punkt-1 – Annada

2

Die @SuppressWarnings Anmerkung Source-Level Retention hat, so dass es nicht in der tatsächlichen Klassendatei, die von ProGuard verarbeitet wird.

Sie müssen bestimmte ProGuard-Regeln selbst hinzufügen, um diese Felder bei Bedarf zur Laufzeit zu behalten.

Um alle Felder einer Klasse halten Sie eine Regel wie diese verwenden:

-keep class xxx.yyy { 
    <fields>; 
} 
Verwandte Themen