前言
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的智慧補全還是很方便的。