Android Studio 2.x com.android.tools.fd.runtime.IncrementalChange $change
阿新 • • 發佈:2018-12-23
我的博文一般會先說一下產生問題的背景,那這次也不例外了。
問題背景:
之前專案執行是ok的,重灌了64bit系統後裝上android studio 2.1之後執行專案怎麼之前的功能不能操作了。於是乎,看到log中怎麼多了個$change 自己從來就沒有寫過這個東東呀。打斷點一看,到下面這行程式碼時
Field[] fields = clazz.getDeclaredFields();
fields多出了個屬性$change。至此已經定位到問題。
解決過程
解決方法
- 方法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 及一個判斷,Field.isSynthetic()方法是判斷當前屬性是編譯插入時返回true。
總結
- 方法1 的解決不會改變現有的程式碼,風險較小,但是不能使用Studio的即時編譯特性
- 方法2 我覺得是比較好的方案,可以徹底的解決問題而且還能使用新的特性