1. 程式人生 > >關於混淆找不到欄位的處理

關於混淆找不到欄位的處理

混淆是一個很強大的產品,在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>;    
}