29
我目前正試圖混淆一系列圖書館。由於Proguard混淆處理刪除了類型參數,因此我的基本庫(包含多個使用類型參數的類和方法)無法被其他代碼使用。消除混淆可消除這些問題。我已閱讀了所有ProGuard使用說明文檔,示例和疑難解答,但一直未能找到有關如何處理類型參數或ProGuard的哪些方面去除類型參數的任何文檔。如何阻止Proguard刪除類型參數?
構造類型參數問題:
庫1包含以下類:
public abstract class AbstractFactoryFactory<T>
庫2包含幾類擴展上述類,但構造拋出,指出一個編譯器錯誤:
error: type AbstractFactoryFactory does not take parameters
返回類型參數問題:
庫1具有以下方法的Foo類:
public List<String> doSomething()
Libary 2嘗試使用doSomething的方法,但模糊處理之後該方法返回,其產生指出以下編譯器錯誤無類型列表:
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();
}
謝謝! Netty 4庫混淆也需要這一點。 Netty 4中的TypeParameterMatcher失敗,因爲它需要用於構造HttpClientCodec,HttpRequestEncoder或MessageToMessageEncoder以及其他類。我爲面臨類似Netty混淆問題的其他用戶編寫此評論。 –
如何保留特定類別/方法的「簽名」? – Elist
帶我永遠找到問題的根源,但一旦我發現它的答案只是彈出在谷歌! – atoMerz