ปลั๊กอิน Android Gradle 9.0 มีการรองรับ Kotlin ในตัวและเปิดใช้โดยค่าเริ่มต้น
ซึ่งหมายความว่าคุณไม่จำเป็นต้องใช้ปลั๊กอิน
org.jetbrains.kotlin.android
(หรือ kotlin-android
) ในไฟล์บิลด์
เพื่อคอมไพล์ไฟล์ต้นฉบับ Kotlin อีกต่อไป
เมื่อใช้ Kotlin ในตัว ไฟล์บิลด์จะเรียบง่ายขึ้นและคุณจะหลีกเลี่ยงปัญหา
ความเข้ากันได้ระหว่าง AGP กับปลั๊กอิน kotlin-android
ได้
เปิดใช้ Kotlin ในตัว
คุณต้องใช้ AGP 9.0 ขึ้นไปจึงจะมี Kotlin ในตัว
AGP 9.0 เปิดใช้ Kotlin ในตัวสำหรับโมดูลทั้งหมดที่คุณใช้ AGP อยู่แล้ว คุณจึงไม่จำเป็นต้องดำเนินการใดๆ เพื่อเปิดใช้ อย่างไรก็ตาม หากก่อนหน้านี้คุณเลือกไม่ใช้ Kotlin ในตัวโดยตั้งค่า android.builtInKotlin=false
ในไฟล์ gradle.properties
คุณจะต้องนำการตั้งค่านั้นออก
หรือตั้งค่า android.builtInKotlin=true
เพื่อเปิดใช้
Kotlin ในตัวกำหนดให้คุณต้องทำการเปลี่ยนแปลงบางอย่างในโปรเจ็กต์ ดังนั้นหลังจากเปิดใช้ Kotlin ในตัวแล้ว ให้ทำตามขั้นตอนถัดไปเพื่อย้ายข้อมูลโปรเจ็กต์
ขั้นตอนการย้ายข้อมูล
หลังจากอัปเกรดโปรเจ็กต์จาก AGP เวอร์ชันเก่าเป็น AGP 9.0 ขึ้นไป หรือหลังจากเปิดใช้ Kotlin ในตัวด้วยตนเอง คุณอาจเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้
Failed to apply plugin 'org.jetbrains.kotlin.android'.
> Cannot add extension with name 'kotlin', as there is an extension already registered with that name.
...หรือ
Failed to apply plugin 'com.jetbrains.kotlin.android'
> The 'org.jetbrains.kotlin.android' plugin is no longer required for Kotlin support since AGP 9.0.
เนื่องจาก Kotlin ในตัวกำหนดให้คุณต้องทำการเปลี่ยนแปลงบางอย่างใน โปรเจ็กต์ หากต้องการแก้ไขข้อผิดพลาดนี้ ให้ทำตามขั้นตอนต่อไปนี้
- นำ
kotlin-android
ปลั๊กอินออก - ย้ายข้อมูลปลั๊กอิน
kotlin-kapt
หากจำเป็น - ย้ายข้อมูลบล็อก
kotlinOptions{}
หากจำเป็น
1. นำปลั๊กอิน kotlin-android
ออก
นำปลั๊กอิน org.jetbrains.kotlin.android
(หรือ kotlin-android
) ออกจากไฟล์บิลด์ระดับโมดูลที่คุณใช้
โค้ดที่แน่นอนที่จะนำออกจะขึ้นอยู่กับว่าคุณใช้แคตตาล็อกเวอร์ชันเพื่อประกาศปลั๊กอินหรือไม่
มีแคตตาล็อกเวอร์ชัน
Kotlin
// Module-level build file plugins {alias(libs.plugins.kotlin.android)}
Groovy
// Module-level build file plugins {alias(libs.plugins.kotlin.android)}
ไม่มีแคตตาล็อกเวอร์ชัน
Kotlin
// Module-level build file plugins {id("org.jetbrains.kotlin.android")}
Groovy
// Module-level build file plugins {id 'org.jetbrains.kotlin.android'}
จากนั้นนำปลั๊กอินออกจากไฟล์บิลด์ระดับบนสุด
มีแคตตาล็อกเวอร์ชัน
Kotlin
// Top-level build file plugins {alias(libs.plugins.kotlin.android) apply false}
Groovy
// Top-level build file plugins {alias(libs.plugins.kotlin.android) apply false}
ไม่มีแคตตาล็อกเวอร์ชัน
Kotlin
// Top-level build file plugins {id("org.jetbrains.kotlin.android") version "KOTLIN_VERSION" apply false}
Groovy
// Top-level build file plugins {id 'org.jetbrains.kotlin.android' version 'KOTLIN_VERSION' apply false}
หากใช้แคตตาล็อกเวอร์ชัน ให้นำคำจำกัดความของปลั๊กอินออกจาก
ไฟล์ TOML ของแคตตาล็อกเวอร์ชันด้วย (โดยปกติคือ gradle/libs.versions.toml
)
[plugins]kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "KOTLIN_VERSION" }
2. ย้ายข้อมูลปลั๊กอิน kotlin-kapt
หากจำเป็น
หากคุณใช้ org.jetbrains.kotlin.kapt
(หรือ kotlin-kapt
) ในไฟล์บิลด์ ปลั๊กอินนี้จะใช้ร่วมกับ Kotlin ในตัวไม่ได้ คุณต้องแทนที่ปลั๊กอินนี้ด้วยปลั๊กอิน com.android.legacy-kapt
โดยใช้เวอร์ชันเดียวกับปลั๊กอิน Android Gradle ปัจจุบัน
ตัวอย่างเช่น หากใช้แคตตาล็อกเวอร์ชัน ให้อัปเดตไฟล์ TOML ของแคตตาล็อกเวอร์ชันดังนี้
[plugins] android-application = { id = "com.android.application", version.ref = "AGP_VERSION" } # Add the following plugin definition legacy-kapt = { id = "com.android.legacy-kapt", version.ref = "AGP_VERSION" } # Remove the following plugin definitionkotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "KOTLIN_VERSION" }
จากนั้นอัปเดตไฟล์บิลด์
Kotlin
// Top-level build file plugins { alias(libs.plugins.legacy.kapt) apply falsealias(libs.plugins.kotlin.kapt) apply false}
Groovy
// Top-level build file plugins { alias(libs.plugins.legacy.kapt) apply falsealias(libs.plugins.kotlin.kapt) apply false}
Kotlin
// Module-level build file plugins { alias(libs.plugins.legacy.kapt)alias(libs.plugins.kotlin.kapt)}
Groovy
// Module-level build file plugins { alias(libs.plugins.legacy.kapt)alias(libs.plugins.kotlin.kapt)}
3. ย้ายข้อมูลบล็อก kotlinOptions{}
หากจำเป็น
หากใช้ android.kotlinOptions{}
DSL คุณต้อง
ย้ายข้อมูลไปยัง kotlin.compilerOptions{}
DSL
เช่น อัปเดตโค้ดนี้
Kotlin
android { kotlinOptions { languageVersion = "2.0" jvmTarget = "11" } }
Groovy
android { kotlinOptions { languageVersion = "2.0" jvmTarget = "11" } }
...เป็น DSL ใหม่
Kotlin
kotlin { compilerOptions { languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0 // Optional: Set jvmTarget // jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11 } }
Groovy
kotlin { compilerOptions { languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0 // Optional: Set jvmTarget // jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11 } }
รายงานปัญหา
หลังจากทำตามขั้นตอนก่อนหน้าแล้ว หากพบปัญหา โปรดดูปัญหาที่ทราบแล้วในคำอธิบายของปัญหา #438678642 และส่งความคิดเห็นให้เราหากจำเป็น
เลือกไม่ใช้ Kotlin ในตัว
หากย้ายข้อมูลโปรเจ็กต์เพื่อใช้ Kotlin ในตัวไม่ได้ ให้ตั้งค่า
android.builtInKotlin = false
ในไฟล์ gradle.properties
เพื่อปิดใช้ Kotlin ในตัวชั่วคราว
เมื่อทำเช่นนั้น บิลด์จะแสดงคำเตือนที่แจ้งให้คุณย้ายข้อมูลไปยัง Kotlin ในตัว เนื่องจากคุณจะปิดใช้ Kotlin ในตัวใน AGP 9.x เวอร์ชันในอนาคตก่อน AGP 10.0 ไม่ได้
การย้ายข้อมูลทีละโมดูล
พร็อพเพอร์ตี้ android.builtInKotlin
Gradle ช่วยให้คุณเปิดหรือปิดใช้ Kotlin ในตัว
สำหรับโมดูลทั้งหมดที่ใช้ AGP ได้
หากการย้ายข้อมูลโมดูลทั้งหมดพร้อมกันเป็นเรื่องยาก คุณสามารถย้ายข้อมูลทีละโมดูลได้โดยทำดังนี้
ตั้งค่า
android.builtInKotlin = false
ในไฟล์gradle.properties
เพื่อ ปิดใช้ Kotlin ในตัวสำหรับทุกโมดูลใช้ปลั๊กอิน
com.android.experimental.built-in-kotlin
กับโมดูล ที่ต้องการเปิดใช้ Kotlin ในตัว โดยใช้เวอร์ชันเดียวกับ ปลั๊กอิน Android Gradle ปัจจุบันทำตามขั้นตอนการย้ายข้อมูลก่อนหน้าเพื่อย้ายข้อมูลโมดูลนี้ไปยัง Kotlin ในตัว
เมื่อย้ายข้อมูลโมดูลทั้งหมดแล้ว ให้นำการตั้งค่า
android.builtInKotlin = false
ในgradle.properties
และปลั๊กอินcom.android.experimental.built-in-kotlin
ในไฟล์บิลด์ออก