問題背景:
之前項目運行是ok的,重裝了64bit系統(tǒng)后裝上Android studio 2.1之后運行項目怎么之前的功能不能操作了。于是乎,看到log中怎么多了個$change 自己從來就沒有寫過這個東東呀。打斷點一看,到下面這行代碼時
Field[] fields = clazz.getDeclaredFields();
fields多出了個屬性$change。至此已經(jīng)定位到問題。
解決方法
- 方法1
既然是增加了Instant Run特性導致的,那就把此特性關閉就可以了(默認是開啟的) 關閉方法:Settings> Build, Execution, Deployment> Instant Run> Enable Instant Run to hot swap code/resource changes on deploy(default enabled)(取消此選項) - 方法2
Field[] fields = objClass.getFields();
for (Field field : fields) {
if(field.isSynthetic()){
continue;
}
//add your code here
}
此方法增加了for 及一個判斷,F(xiàn)ield.isSynthetic()方法是判斷當前屬性是編譯插入時返回true。
總結
- 方法1 的解決不會改變現(xiàn)有的代碼,風險較小,但是不能使用Studio的即時編譯特性
- 方法2 我覺得是比較好的方案,可以徹底的解決問題而且還能使用新的特性