Ich versuche derzeit, eine Reihe von Bibliotheken zu verschleiern. Meine Basisbibliothek, die mehrere Klassen und Methoden enthält, die Typparameter verwenden, kann von anderem Code nicht verwendet werden, da die Typparameter durch Proguard-Verschleierung entfernt wurden. Die Beseitigung der Verschleierung beseitigt diese Probleme. Ich habe alle ProGuard-Nutzungsdokumente, Beispiele und Problemlösungen gelesen, konnte aber keine Dokumentation finden, wie mit Typparametern umzugehen ist oder welcher Aspekt von ProGuard die Typparameter streift.Wie verhindere du, dass Proguard Typparameter entfernt?
Constructor Typ Parameter Ausgabe:
Bibliothek 1 enthält die folgende Klasse:
public abstract class AbstractFactoryFactory<T>
Library 2 mehrere Klassen enthält, die die obige Klasse erweitern, aber der Konstruktor wirft einen Compiler-Fehler, die besagt:
Rückgabetyp Parameter Ausgabe:
Bibliothek 1 hat eine Foo-Klasse mit der folgenden Methode:
public List<String> doSomething()
Libary 2 versucht, die doSomething Methode zu verwenden, aber die Methode gibt eine nicht typisierte Liste nach der Verschleierung, die den folgenden Compiler-Fehler erzeugt, die besagt:
error: incompatible types Object
Proguard.cfg
-dontoptimize
-renamesourcefileattribute SourceFile
-keepparameternames
-keepattributes Exceptions,*Annotation*,InnerClasses,SourceFile,LineNumberTable,Deprecated
-keep public class * {
public protected *;
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembernames class * {
java.lang.Class class$(java.lang.String);
java.lang.Class class$(java.lang.String, boolean);
}
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
Dank! Dies wird auch für Netty 4 Bibliotheksverschleierung benötigt. TypeParameterMatcher in Netty 4 ist fehlgeschlagen, da es benötigt wird, um HttpClientCodec, HttpRequestEncoder oder MessageToMessageEncoder und wahrscheinlich andere Klassen zu erstellen. Ich schreibe diesen Kommentar für andere Benutzer, die mit ähnlichen Netty Verschleierungsproblemen konfrontiert sind. –
Wie behalten Sie die "Signatur" einer bestimmten Klasse/Methode? – Elist
Nahm mich für immer, um die Wurzel des Problems zu finden, aber sobald ich es gefunden habe, ist die Antwort nur in Google aufgetaucht! – atoMerz