Skip to main content

插件作者的內建 Kotlin 遷移指南

將 Flutter 插件遷移至使用內建 Kotlin。

本指南專門針對插件作者說明遷移步驟。

更新 Gradle 檔案

#

首先,找到 kotlin-android 插件 (或 org.jetbrains.kotlin.android 插件)。 它通常位於 <plugin-project>/android/build.gradle 或 <plugin-project>/android/build.gradle.kts 檔案的 plugins 區塊中。 若您使用舊式 apply 語法, 它會位於基於 Groovy 的 <plugin-project>/android/build.gradle 檔案中, 因為 Kotlin DSL 不支援此語法。

以下範例示範如何遷移 Flutter 插件:

遷移前:

<app-src>/android/build.gradle(.kts)
kotlin
plugins {
    id("com.android.library")
    id("kotlin-android")
    // ...
}
​
android {
    // ...
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_17.toString()
    }
    // ...
}
​
// ...

接下來,移除 kotlin-android 插件及 kotlinOptions 區塊:

<app-src>/android/build.gradle.kts
kotlin
plugins {
    id("com.android.library")
    id("kotlin-android")
    // ...
}
​
android {
    // ...
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_17.toString()
    }
    // ...
}

加入含有下列內容的 kotlin.compilerOptions{} DSL 區塊:

<app-src>/android/build.gradle.kts
kotlin
kotlin {
    compilerOptions {
        jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
    }
}

完成後,檔案的內容大致如下:

遷移後:

<app-src>/android/build.gradle(.kts)
kotlin
plugins {
    id("com.android.library")
    // ...
}
​
android {
    // ...
}
​
kotlin {
    compilerOptions {
        jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
    }
}
​
// ...

遷移前:

<app-src>/android/build.gradle
groovy
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
// ...
​
android {
    // ...
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_17.toString()
    }
    // ...
}
​
// ...

接下來,移除 kotlin-android 插件及 kotlinOptions 區塊:

<app-src>/android/build.gradle
groovy
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
 ...
​
android {
    // ...
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_17.toString()
    }
    // ...
}

加入含有下列內容的 kotlin.compilerOptions{} DSL 區塊:

<app-src>/android/build.gradle
groovy
kotlin {
    compilerOptions {
        jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
    }
}

完成後,檔案的內容大致如下:

遷移後:

<app-src>/android/build.gradle
groovy
apply plugin: 'com.android.library'
// ...
​
android {
    // ...
}
​
kotlin {
    compilerOptions {
        jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
    }
}
​
// ...

更新插件的 pubspec.yaml

#

使用 kotlin.compilerOptions {} DSL 區塊需要 Kotlin Gradle Plugin (KGP) 最低版本為 2.0.0。 從 Flutter 3.44 開始,所需的最低 KGP 版本為 2.0.0。 為確保使用您插件的應用程式能夠在 AGP 9 上建置, 請在插件版本中要求 Flutter 最低版本為 3.44。 這讓使用您插件的應用程式可以在停用內建 Kotlin(android.builtInKotlin=false)的情況下, 於 AGP 9 上建置。

由於您正在更新 Flutter 最低版本, 您也必須同步更新對應的 Dart 最低版本。

更新 Flutter 最低版本及 Dart 最低版本:

<plugin-project>/pubspec.yaml
yaml
...
​
environment:
  sdk: ^<previous-dart-minimum>
  sdk: ^3.12.0
  flutter: ">=<previous-flutter-minimum>"
  flutter: ">=3.44.0"
​
...

完成後,檔案的內容大致如下:

<plugin-project>/pubspec.yaml
yaml
# ...
​
environment:
  sdk: ^3.12.0
  flutter: ">=3.44.0"
​
# ...

更新插件的 changelog

#

在新發布的插件版本的 CHANGELOG.md 檔案中記錄您的變更:

<plugin-project>/CHANGELOG.md
markdown
## <new-plugin-release-version>
​
- Updates the minimum supported SDK version to Flutter 3.44/Dart 3.12.
- Migrates to built-in Kotlin.
​
 ...

驗證

#

在啟用內建 Kotlin 之前, 請確認您已遷移插件範例應用程式 及其使用的所有 Flutter 插件。 同時也請確認您已將插件範例應用程式 更新至 AGP 9 以上,因為內建 Kotlin 需要 AGP 9 以上。

若要啟用內建 Kotlin, 請在 gradle.properties 檔案中 將 android.builtInKotlin 屬性設為 true:

<flutter-project>/android/gradle.properties
properties
...
android.builtInKotlin=true

啟用內建 Kotlin 後, 請執行 flutter run 或 flutter build apk, 確認您的插件範例應用程式能在已連接的 Android 裝置或模擬器上成功建置並啟動。

若您的插件範例應用程式也有套用 KGP, 則您還需要遷移範例應用程式。 若要遷移您的範例應用程式, 請依照應用程式開發者遷移指南操作。