關於混淆找不到欄位的處理
混淆是一個很強大的產品,在proguard中使用反射後很多情況需要使用-keep命令來遮蔽不混程式碼的混淆,但對以下情況需要特別注意:
Class.forName("SomeClass")
SomeClass.class
SomeClass.class.getField("someField")
SomeClass.class.getDeclaredField("someField")
SomeClass.class.getMethod("someMethod", new Class[] {})
SomeClass.class.getMethod("someMethod", new Class[] { A.class })
SomeClass.class.getMethod("someMethod", new Class[] { A.class, B.class })
SomeClass.class.getDeclaredMethod("someMethod", new Class[] {})
SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class })
SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class, B.class })
AtomicIntegerFieldUpdater.newUpdater(SomeClass.class, "someField")
AtomicLongFieldUpdater.newUpdater(SomeClass.class, "someField")AtomicReferenceFieldUpdater.newUpdater(SomeClass.class, SomeType.class, "someField")
網上說這些情況proguard
將會檢測和處理。但最近我在android專案中使用後類是被處理了,但字串表示的資料(比如這裡的someField
-keep public class yourClass
-keepclasseswithmembers class yourClass {
<fields>;
<methods>;
}