Android Studio 2.2 jack深坑

糰子吃蛋撻發表於2016-11-02

前言

lambda是個好東西,配合rxjava能讓程式碼看起來非常舒服,既減少了大量敲鍵盤的次數也讓可讀性變得更強(對於熟悉lambda的人來說)。

Android studio從2.2開始支援java8,也就意味著終於可以用上官方的lambda了。但是,坑來了…

配置java8

如何安裝java8就不說了

在Android studio中支援java8很簡單,如下配置

android {
      ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    defaultConfig {
        ...
        jackOptions {
            enabled true
        }
    }
   ...
}

問題就出在這個jackOptions上

Jack工具鏈

Android 新一代編譯 toolchain Jack & Jill 簡介

看起來很美好的東西,可目前卻有很多坑

一、慢

原來編譯專案需要2m左右(i7-6700),開啟了之後接近6m

二、亂碼

這是最坑的,最初出現亂碼的時候還以為檔案編碼搞亂了,查了半天才發現不是,是因為這玩意兒開啟之後就會預設以本地編碼編譯檔案(該說法可能有誤)。

可以新建一個專案,依照上面配置好,然後Log.e(“Test”, “測試”);

只要是中文,而且這個中文不是寫在xml檔案裡(由於xml都標明utf-8),那麼你會看到console裡列印出來的是亂碼(其實就是文字以gbk的編碼列印出來了)。

三、GC Overhead

在編譯tinypinyin這個開源庫的時候,由於這個開源庫有好多個超大型的陣列,總是會爆出GC Overhead的錯誤…搞了半天,試了好多種方法。

發現需要作如下處理:

在app的build.gradle裡這樣新增

android {
      ...
    dexOptions {
        javaMaxHeapSize "4096M"
    }
}

至於你要設定多少…反正我設了2G都會炸,乾脆給4G了

總結

jack看起來很美好,但在當下還只能算是一個半成品。與其為了用lambda忍受一堆問題開啟jack,還不如老老實實地寫一大坨一大坨程式碼來得舒服,畢竟as的智慧補全還是很方便的。

相關文章