java項(xiàng)目添加`kotlin`支持

手動(dòng)添加kotlin配置

在項(xiàng)目的bulid.gradle中添加以下代碼

buildscript {
    ext.kotlin_version = '1.4.10'
     repositories {
        mavenCentral()
    ...
    }
    ...
    dependencies {
        ...
        //對(duì)kotlin支持
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        ...
    }
}

在你需要支持kotlinmodule中添加kotlin的配置

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'
...
dependencies {
//annotationProcessor替換kapt
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

}

至此在這個(gè)項(xiàng)目里的這個(gè)module已經(jīng)支持kotlin開發(fā)了

自動(dòng)添加kotlin的配置

在android studio中也增加了java轉(zhuǎn)kotlin的工具,方便開發(fā)者轉(zhuǎn)換

image

然后會(huì)出現(xiàn)兩個(gè)選項(xiàng)


image

一個(gè)是使用gradle的java項(xiàng)目轉(zhuǎn)kotlin
一個(gè)是使用gradle的android項(xiàng)目轉(zhuǎn)kotlin
我們使用第二個(gè)

選擇完畢之后我們會(huì)遇到第二個(gè)彈窗選擇


image

第一個(gè)選項(xiàng)是所有module,也就是整個(gè)項(xiàng)目全部轉(zhuǎn)kotlin項(xiàng)目
第二個(gè)就是在一個(gè)項(xiàng)目里多個(gè)module,指定某個(gè)module可以支持kotlin
大家可以根據(jù)需求使用

當(dāng)我們使用自動(dòng)轉(zhuǎn)換之后項(xiàng)目代碼如下

buildscript {
    ext.kotlin_version = '1.4.10'
     repositories {
        mavenCentral()
    ...
    }
    ...
    dependencies {
        ...
        //對(duì)kotlin支持
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        ...
    }
}

在你需要支持kotlinmodule中添加kotlin的配置

apply plugin: 'kotlin-android'

...
dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

自動(dòng)轉(zhuǎn)換和手動(dòng)轉(zhuǎn)換的對(duì)比

只有一點(diǎn)就是手動(dòng)代碼添加多添加了兩個(gè)插件

apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'

這兩個(gè)插件不是必須的,編譯kotlin項(xiàng)目只需要apply plugin: 'kotlin-android'一個(gè)就可以了,
但是在開發(fā)中kaptkotlin-android-extensions插件是必不可少的

關(guān)于kapt

kapt 即 Kotlin annotation processing tool(Kotlin 注解處理工具)縮寫躺彬。

在java開發(fā)中我們導(dǎo)入依賴常用的都是

// 導(dǎo)入注解處理
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
//導(dǎo)入依賴
    implementation 'io.reactivex:rxandroid:1.2.1'

在kotlin項(xiàng)目中
我們使用kapt代替annotationProcessor,才能生效

// 導(dǎo)入注解處理
    kapt 'com.jakewharton:butterknife-compiler:8.8.1'
//導(dǎo)入依賴
    implementation 'io.reactivex:rxandroid:1.2.1'

官方文檔的說(shuō)明這樣的

如果你以前使用 Android 支持作為注解處理器煤墙,那么以 kapt 取代 annotationProcessor 配置的使用。如果你的項(xiàng)目包含 Java 類宪拥,kapt 也會(huì)顧全到它們仿野。

如果為 androidTest 或 test 源代碼使用注解處理器,那么相應(yīng)的 kapt 配置名為 kaptAndroidTest 和 kaptTest她君。請(qǐng)注意 kaptAndroidTest 和 kaptTest 擴(kuò)展了 kapt脚作,所以你可以只提供 kapt 依賴而它對(duì)生產(chǎn)和測(cè)試源代碼都可用。

注解處理器參數(shù)

使用 arguments {} 塊將參數(shù)傳給注解處理器:

kapt {
    arguments {
        arg("key", "value")
    }
}

kotlin-android-extensions

Kotlin Android Extensions是Kotlin團(tuán)隊(duì)開發(fā)的一個(gè)插件缔刹,目的是讓我們?cè)陂_發(fā)過(guò)程中更少的編寫一樣的代碼球涛。例如:findViewById
布局文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity2">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Activity代碼:

import kotlinx.android.synthetic.main.activity_main.*

class MainActivity2 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        button.setOnClickListener {
            Toast.makeText(this, "被點(diǎn)擊", Toast.LENGTH_LONG).show()
        }
    }
}

我們只需要使用控件的id就可以調(diào)用獲取控件,當(dāng)然也需要導(dǎo)入布局

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市桨螺,隨后出現(xiàn)的幾起案子宾符,更是在濱河造成了極大的恐慌酿秸,老刑警劉巖灭翔,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異辣苏,居然都是意外死亡肝箱,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門稀蟋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)煌张,“玉大人,你說(shuō)我怎么就攤上這事退客】ト冢” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵萌狂,是天一觀的道長(zhǎng)档玻。 經(jīng)常有香客問(wèn)我,道長(zhǎng)茫藏,這世上最難降的妖魔是什么误趴? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮务傲,結(jié)果婚禮上凉当,老公的妹妹穿的比我還像新娘枣申。我一直安慰自己,他們只是感情好看杭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布忠藤。 她就那樣靜靜地躺著,像睡著了一般泊窘。 火紅的嫁衣襯著肌膚如雪熄驼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天烘豹,我揣著相機(jī)與錄音瓜贾,去河邊找鬼。 笑死携悯,一個(gè)胖子當(dāng)著我的面吹牛祭芦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播憔鬼,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼龟劲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了轴或?” 一聲冷哼從身側(cè)響起昌跌,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎照雁,沒(méi)想到半個(gè)月后蚕愤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饺蚊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年萍诱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片污呼。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裕坊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出燕酷,到底是詐尸還是另有隱情籍凝,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布苗缩,位于F島的核電站饵蒂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏挤渐。R本人自食惡果不足惜苹享,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧得问,春花似錦囤攀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至漓骚,卻和暖如春蝌衔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蝌蹂。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工噩斟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人孤个。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓剃允,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親齐鲤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子斥废,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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