手動(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"
...
}
}
在你需要支持kotlin
module中添加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)換
然后會(huì)出現(xiàn)兩個(gè)選項(xiàng)
一個(gè)是使用gradle的java項(xiàng)目轉(zhuǎn)kotlin
一個(gè)是使用gradle的android項(xiàng)目轉(zhuǎn)kotlin
我們使用第二個(gè)
選擇完畢之后我們會(huì)遇到第二個(gè)彈窗選擇
第一個(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"
...
}
}
在你需要支持kotlin
module中添加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ā)中kapt
和kotlin-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)入布局