1. 程式人生 > >Android Studio 2.x com.android.tools.fd.runtime.IncrementalChange $change

Android Studio 2.x com.android.tools.fd.runtime.IncrementalChange $change

我的博文一般會先說一下產生問題的背景,那這次也不例外了。

問題背景:

之前專案執行是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 我覺得是比較好的方案,可以徹底的解決問題而且還能使用新的特性