前幾天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啦。
然后就悲劇了,
- 有的類只被轉(zhuǎn)了一半
- 有的類不知道被轉(zhuǎn)成什么鬼
-
RecyclerView.Adapter
里的RecycleViewHolder
居然被轉(zhuǎn)成interface
了,里面的方法也變得亂七八糟, - 帶
static
的類和方法基本沒有轉(zhuǎn)對過,單例模式更加悲劇
...
手動改了半天,發(fā)現(xiàn)還有一堆紅色,果斷把項(xiàng)目刪了??,重新導(dǎo)入。
kotlin和dataBinding
回到起點(diǎn)再來一次,現(xiàn)在保留之前的java代碼,新的代碼用kotlin編寫,總沒問題了吧。
先按套路走一遍
- 編譯一次,跑起來再說
- 沒有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
,重新編譯,問題解決。
DataBinding注解不能用
java代碼中的set和get方法,在kotlin中以不同的方式出現(xiàn),導(dǎo)致@Bindable
和notifyPropertyChanged(BR.xxl)
不能直接用于get和set中。
解決方法
用ObservableField
在xml布局中,沒有代碼提示
xml中引用databinding,只有屬性提示,沒有方法提示
報錯莫名其妙
本來databinding報錯就天馬行空了,配上kotlin,這錯誤更加看不懂,經(jīng)常在編譯時就出錯
這種錯誤時不時會出現(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沒碰到該問題了