使用Kotlin開(kāi)發(fā)Android應(yīng)用初體驗(yàn)

使用Kotlin開(kāi)發(fā)Android應(yīng)用初體驗(yàn)

昨晚卖毁,最近一屆的谷歌IO大會(huì)正式將Kotlin確定為了官方開(kāi)發(fā)語(yǔ)言涝动,作為一名Android開(kāi)發(fā)鳥(niǎo)扣孟,怎么能不及時(shí)嘗嘗鮮呢?

Kotlin的簡(jiǎn)要介紹

在開(kāi)發(fā)之前良瞧,很多同學(xué)一定有很多疑問(wèn),Kotlin到底有啥好處悄晃,怎么和現(xiàn)有的項(xiàng)目共存呢静尼?Java那么些特性Kotlin都有嗎?嗯传泊,讓我們一一來(lái)看鼠渺。

以下內(nèi)容摘自:Kotlin的官方網(wǎng)站:https://www.kotlincn.net/docs/reference/android-overview.html

Kotlin 非常適合開(kāi)發(fā) Android 應(yīng)用程序,將現(xiàn)代語(yǔ)言的所有優(yōu)勢(shì)帶入 Android 平臺(tái)而不會(huì)引入任何新的限制:

  • 兼容性:Kotlin 與 JDK 6 完全兼容眷细,保障了 Kotlin 應(yīng)用程序可以在較舊的 Android 設(shè)備上運(yùn)行而無(wú)任何問(wèn)題拦盹。Kotlin 工具在 Android Studio 中會(huì)完全支持,并且兼容 Android 構(gòu)建系統(tǒng)溪椎。
  • 性能:由于非常相似的字節(jié)碼結(jié)構(gòu)普舆,Kotlin 應(yīng)用程序的運(yùn)行速度與 Java 類(lèi)似。 隨著 Kotlin 對(duì)內(nèi)聯(lián)函數(shù)的支持校读,使用 lambda 表達(dá)式的代碼通常比用 Java 寫(xiě)的代碼運(yùn)行得更快沼侣。
  • 互操作性:Kotlin 可與 Java 進(jìn)行 100% 的互操作,允許在 Kotlin 應(yīng)用程序中使用所有現(xiàn)有的 Android 庫(kù) 歉秫。這包括注解處理蛾洛,所以數(shù)據(jù)綁定和 Dagger 也是一樣。
  • 占用:Kotlin 具有非常緊湊的運(yùn)行時(shí)庫(kù)雁芙,可以通過(guò)使用 ProGuard 進(jìn)一步減少轧膘。 在實(shí)際應(yīng)用程序中,Kotlin 運(yùn)行時(shí) 只增加幾百個(gè)方法以及 .apk 文件不到 100K 大小兔甘。
  • 編譯時(shí)長(zhǎng):Kotlin 支持高效的增量編譯谎碍,所以對(duì)于 清理構(gòu)建會(huì)有額外的開(kāi)銷(xiāo),增量構(gòu)建通常與 Java 一樣快或者更快洞焙。
  • 學(xué)習(xí)曲線:對(duì)于 Java 開(kāi)發(fā)人員蟆淀,Kotlin 入門(mén)很容易。包含在 Kotlin 插件中的自動(dòng) Java 到 Kotlin 的轉(zhuǎn)換器 有助于邁出第一步澡匪。Kotlin 心印 通過(guò)一系列互動(dòng)練習(xí)提供了語(yǔ)言主要功能的指南熔任。

Kotlin 用于 Android 的案例學(xué)習(xí)

Kotlin 已被一些大公司成功采用,其中一些公司分享了他們的經(jīng)驗(yàn):

  • Pinterest 已經(jīng)成功地將 Kotlin 引入了他們的應(yīng)用程序中仙蛉,每個(gè)月有 1 億 5 千萬(wàn)人使用笋敞。
  • Basecamp 的 Android 應(yīng)用程序是 100% Kotlin 代碼,他們報(bào)告了程序員幸福的 巨大差異荠瘪,以及工作質(zhì)量和速度的巨大改善夯巷。
  • Keepsafe 的 App Lock 應(yīng)用程序也已轉(zhuǎn)換為 100% Kotlin, 使源代碼行數(shù)減少 30%哀墓、方法數(shù)減少 10%趁餐。
    用于 Android 開(kāi)發(fā)的工具

Kotlin 團(tuán)隊(duì)為 Android 開(kāi)發(fā)提供了一套超越標(biāo)準(zhǔn)語(yǔ)言功能的工具:

  • Kotlin Android 擴(kuò)展是一個(gè)編譯器擴(kuò)展, 可以讓你擺脫代碼中的 findViewById() 調(diào)用篮绰,并將其替換為合成的編譯器生成的 屬性后雷。
  • Anko 是一個(gè)提供圍繞 Android API 的 Kotlin 友好的包裝器的庫(kù) ,以及一個(gè)可以用 Kotlin 代碼替換布局 .xml 文件的 DSL。

下一步

  • Android 與 Kotlin 入門(mén)教程 指導(dǎo)你將 Kotlin 插件安裝到 Android Studio 中臀突,并創(chuàng)建你的第一個(gè) Kotlin 應(yīng)用程序勉抓。
  • 關(guān)于更深入的介紹,請(qǐng)查看本站的參考文檔及 Kotlin 心印候学。
  • 另一個(gè)很好的資源是 Kotlin for Android Developers藕筋, 這本書(shū)會(huì)引導(dǎo)你逐步完成在 Kotlin 中創(chuàng)建真正的 Android 應(yīng)用程序的過(guò)程。

最后附上《Kotlin for Android Developers》這本學(xué)習(xí)使用Kotlin開(kāi)發(fā)Android應(yīng)用的指南梳码。

使用Kotlin開(kāi)發(fā)Android應(yīng)用

在開(kāi)始學(xué)習(xí)使用Kotlin開(kāi)發(fā)Android應(yīng)用之前隐圾,我們首先需要準(zhǔn)備好手中的環(huán)境,那就是必須先配置好Android Studio 3.0的環(huán)境掰茶。

創(chuàng)建Kotlin開(kāi)發(fā)工程

這里的工程創(chuàng)建與普通的Android應(yīng)用工程創(chuàng)建并無(wú)不同暇藏,唯一的不同之處在于創(chuàng)建工程時(shí)勾選 Include Kotlin support 選項(xiàng)。如圖:

這里寫(xiě)圖片描述

在默認(rèn)創(chuàng)建好的Activity中便已經(jīng)是Kotlin的代碼濒蒋,看起來(lái)與Java代碼本身非常相似:

這里寫(xiě)圖片描述

Kotlin文件以.kt結(jié)尾盐碱。

默認(rèn)創(chuàng)建好的Kotlin文件還是會(huì)放在和Java文件一樣的位置,如果需要使kotlin文件與Java文件分開(kāi)放的話(huà)啊胶,那么可以在對(duì)應(yīng)的gradle文件中加入以下配置:

android {
   sourceSets {
       main.java.srcDirs += 'src/main/kotlin'
   }
}

這樣的話(huà)甸各,所有默認(rèn)創(chuàng)建的Kotlin文件就會(huì)被放在/kotlin/目錄下了。

在現(xiàn)有的工程中添加Kotlin

如果需要在已有的工程中添加Kotlin的支持焰坪,那么只需要在新創(chuàng)建Activity時(shí)在Source language選項(xiàng)中選擇Kotlin就可以:

這里寫(xiě)圖片描述

將Java代碼轉(zhuǎn)換為Kotlin代碼

在Android Studio 3.0中提供了可以將Java代碼轉(zhuǎn)化為Kotlin代碼的工具趣倾。使用時(shí)只需要將對(duì)應(yīng)的Java文件打開(kāi),然后選擇菜單欄上的 **Code -> Convert Java File to Kotlin File **就可以完成轉(zhuǎn)換某饰。

這里寫(xiě)圖片描述

不過(guò)需要注意的是儒恋,這個(gè)工具可以完成大部分的語(yǔ)法轉(zhuǎn)換,個(gè)別類(lèi)型黔漂,比如數(shù)組在轉(zhuǎn)換的時(shí)候可能有些問(wèn)題诫尽,需要自己手動(dòng)調(diào)整。博主我在練習(xí)的時(shí)候發(fā)現(xiàn)了這個(gè)問(wèn)題炬守,不過(guò)通過(guò)語(yǔ)法文檔迅速做了修正牧嫉。發(fā)現(xiàn)Kotlin在語(yǔ)法簡(jiǎn)潔方面確實(shí)要優(yōu)于Java很多。例如下面一段代碼:

        val bitmaps = LargePicLoadHelper.cutItemImage(cutImage, itemImageHeight)
        cutImage.recycle()

        for (i in bitmaps) {
            val imageView = ImageView(this)
            imageView.setImageBitmap(i)
            linearLayout.addView(imageView)
        }

        textView.postDelayed({
            for (i in bitmaps) {
                i.recycle()
            }
        }, 1000)

這段代碼在輪詢(xún)數(shù)組時(shí)减途,比Java的foreach循環(huán)要簡(jiǎn)潔很多酣藻,i在這里代表了一個(gè)Bitmap對(duì)象,bitmaps是一個(gè)數(shù)組鳍置。是不是很簡(jiǎn)單呢辽剧?

通過(guò)Kotlin使用Java代碼

Kotlin提供了很強(qiáng)大的互操作性,這個(gè)互操作性是個(gè)什么鬼呢税产?就是說(shuō)Kotlin可以很方便的調(diào)用Java代碼怕轿,Java代碼也可以很方便的調(diào)用Kotlin代碼偷崩。這個(gè)方便到什么程度呢?Kotlin可以直接調(diào)用Java代碼撞羽。如果你了解JNI的話(huà)阐斜,那就知道Kotlin的互操作性有多么簡(jiǎn)潔多么方便了。

使用Kotlin聲明Activity:

class MyActivity : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity)
  }
}

使用Kotlin設(shè)置點(diǎn)擊事件:

val textView = findViewById(R.id.text) as TextView
textView.setOnClickListener {

    Toast.makeText(this,"Hello Kotlin!",Toast.LENGTH_SHORT).show()

}

看到?jīng)]有放吩,上面的setContentView以及下面的Toast就是Android提供的API智听,我們可以直接使用。并且setOnClickListener方法內(nèi)部并不需要new OnClickListener對(duì)象渡紫!直接寫(xiě)點(diǎn)擊實(shí)現(xiàn)就可以了!還有Toast的第一個(gè)參數(shù)this在Java中是一定要寫(xiě)Activity.this的考赛,而這里只用寫(xiě)this就可以了惕澎!是不是很niubility?


最后颜骤,希望大家可以加入下面這個(gè)Kotlin開(kāi)發(fā)學(xué)習(xí)交流群唧喉,一起探討學(xué)習(xí)Kotlin!

這里寫(xiě)圖片描述
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末忍抽,一起剝皮案震驚了整個(gè)濱河市八孝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸠项,老刑警劉巖干跛,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異祟绊,居然都是意外死亡楼入,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)牧抽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嘉熊,“玉大人,你說(shuō)我怎么就攤上這事扬舒〔簦” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵讲坎,是天一觀的道長(zhǎng)孕惜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)衣赶,這世上最難降的妖魔是什么诊赊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮府瞄,結(jié)果婚禮上碧磅,老公的妹妹穿的比我還像新娘碘箍。我一直安慰自己,他們只是感情好鲸郊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布丰榴。 她就那樣靜靜地躺著,像睡著了一般秆撮。 火紅的嫁衣襯著肌膚如雪四濒。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,727評(píng)論 1 305
  • 那天职辨,我揣著相機(jī)與錄音盗蟆,去河邊找鬼。 笑死舒裤,一個(gè)胖子當(dāng)著我的面吹牛喳资,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腾供,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼仆邓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了伴鳖?” 一聲冷哼從身側(cè)響起节值,我...
    開(kāi)封第一講書(shū)人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎榜聂,沒(méi)想到半個(gè)月后搞疗,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡峻汉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年贴汪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片休吠。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扳埂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘤礁,到底是詐尸還是另有隱情阳懂,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布柜思,位于F島的核電站岩调,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赡盘。R本人自食惡果不足惜号枕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望陨享。 院中可真熱鬧葱淳,春花似錦钝腺、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至皿桑,卻和暖如春毫目,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诲侮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工镀虐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浆西。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓粉私,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親近零。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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