kotlin和DataBinding一起使用踩坑日記(不斷跟新)

前幾天google 在IO大會上宣布kotlin成為android開發(fā)的一級語言,第二天就推出android studio3.0,自帶android-kotlin插件。
號稱踩坑小王子的我,怎能不作死嘗試一把。


首先簡單過了一遍kotlin教程,嗯,跟swift差不多,沒難度。
直接搞了兩個demo(一個java的,一個kotlin),然后用android studio3.0自帶的,把java轉(zhuǎn)成kotlin,兩個demo都一把通過,so easy,kotlin寫起來也很爽,很有逼格,決定搞個復(fù)雜點(diǎn)(copy一份公司項(xiàng)目),然后就被各種坑了。


自帶的java轉(zhuǎn)kotlin功能

作為資深強(qiáng)迫癥患者,當(dāng)然是先把之前的java代碼轉(zhuǎn)成kotlin啦。
然后就悲劇了,

  1. 有的類只被轉(zhuǎn)了一半
  2. 有的類不知道被轉(zhuǎn)成什么鬼
  3. RecyclerView.Adapter里的RecycleViewHolder居然被轉(zhuǎn)成interface了,里面的方法也變得亂七八糟,
  4. static的類和方法基本沒有轉(zhuǎn)對過,單例模式更加悲劇
    ...

手動改了半天,發(fā)現(xiàn)還有一堆紅色,果斷把項(xiàng)目刪了??,重新導(dǎo)入。


kotlin和dataBinding

回到起點(diǎn)再來一次,現(xiàn)在保留之前的java代碼,新的代碼用kotlin編寫,總沒問題了吧。

先按套路走一遍

  1. 編譯一次,跑起來再說
  2. 沒有2了,第一步就跪了???♂?

我就操了,啥也沒動,編譯都不過?這怎么玩。

淡定、淡定,還是按套路走吧,看下錯誤提示

* What went wrong:
Circular dependency between the following tasks:
:app:compileDebugKotlin
+--- :app:dataBindingExportBuildInfoDebug
|    \--- :app:compileDebugKotlin (*)
\--- :app:kaptDebugKotlin
     \--- :app:dataBindingExportBuildInfoDebug (*)

循環(huán)依賴了?小問題
在app下的build.gradle中,去掉kotlin中的dataBinding依賴,然后在編譯

compile ("org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"){
        exclude group: 'com.android.dataBinding', module: 'compiler'
    }

然而并沒什么卵用,還是一樣的錯,此時我一臉懵逼。
既然編譯器給出了具體錯誤,那就好辦,繼續(xù)按套路來。
不懂問度娘,然后砸電腦的心都有了,翻到第N頁了,你妹的都是互相轉(zhuǎn)發(fā)的,N年前的老問題。
度娘靠不住,只好祭出我看片才用的梯子,google一搜,前幾條都是stackoverflow的回答,但都不是我要的答案。
然后進(jìn)入全球最大同性交流平臺stackoverflow,在里面一搜。所噶,第一頁就有個相同的提問,還被標(biāo)明問題已解決的原諒綠,果斷點(diǎn)進(jìn)去
http://stackoverflow.com/questions/44035504/how-to-use-data-binding-and-kotlin-in-android-studio-3-0-0

里面說了是kotlin1.1.2-4和Android Gradle plugin 3.0.0-alpha1的問題,根據(jù)大神提供的步驟,改成1.1.2-2,local.properties里去掉kotlin的增量編譯kotlin.incremental=false,重新編譯,問題解決。

52F7F39B-5CED-4B2A-B52B-CA89A40D46F5.png
3807484E-3B0B-47C5-9FEC-1C5656C792C0.png

DataBinding注解不能用

java代碼中的set和get方法,在kotlin中以不同的方式出現(xiàn),導(dǎo)致@BindablenotifyPropertyChanged(BR.xxl)不能直接用于get和set中。

解決方法
ObservableField


在xml布局中,沒有代碼提示

xml中引用databinding,只有屬性提示,沒有方法提示


報錯莫名其妙

本來databinding報錯就天馬行空了,配上kotlin,這錯誤更加看不懂,經(jīng)常在編譯時就出錯

63990386C9105CD75A587C21A91B38B6.jpg
F9430692-AFDE-4701-8056-335A0C4C57B6.png

這種錯誤時不時會出現(xiàn),
誰能告訴我這是什么情況

解決方法

 dataBinding {
        enabled = true
    }

先把這段注釋掉,編譯一次,不要管有沒有報錯,
然后打開這段代碼,再編譯一次,這問題一般都會消失,
如果還沒有,clean項(xiàng)目,關(guān)掉studio,重啟電腦,重復(fù)上面兩部,多試幾次


添加res文件報錯

如果在res下添加新的文件或文件夾,必須要clean一下,不然各種找不到資源
android studio3.0 canary1.0 升級到android studio3.0 canary2.0沒碰到該問題了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容