What are the differences between these three Kotlin plugins and what do they actually do?
plugins {
    id 'kotlin-android'
    id 'org.jetbrains.kotlin.android'
    id "org.jetbrains.kotlin.jvm" version "1.6.20"
}
The third one seems to be the recommended way specially when using Kotlin Coroutines
                        
These plugins provide integration with different other Gradle plugins. They both setup compiling Kotlin for the JVM, but aim to interoperate with different other tools.
org.jetbrains.kotlin.androidorkotlin-androidThis plugin offers integration of Kotlin with the Android Gradle plugin, which should also be applied to the project. The Kotlin compilations are set up to be included in the builds of Android variants (e.g.
debug,release,testDebugetc.)The IDs
kotlin-androidandorg.jetbrains.kotlin.androiddesignate the same Gradle plugin. The only difference is that the "full" IDorg.jetbrains.kotlin.androidcan be used for resolving the plugin from the Gradle Plugin Portal, while the shorter IDkotlin-androidcan only be used for applying the plugin if you already have it on the build classpath (i.e. it's added elsewhere).org.jetbrains.kotlin.jvm(also has a shorter aliaskotlin)This is the plugin for building Kotlin projects that target JVM without Android support.
The plugin offers integration with the Gradle
javaplugin (as well asjava-libraryorapplication). The project that applies this plugin can also use Java sources. The Kotlin compilations are wired with thejavaplugin's source sets (mainandtestby default)Normally you should only apply one of these plugins, depending on whether you target Android or "standard" JVM. If you need to target both platforms, you should use the Kotlin Multiplatform plugin by ID
org.jetbrains.kotlin.multiplatform, which adds the DSL to setup the targets in the project. Those might includejvm()andandroid(), as well as other targets: JS, WASM, Kotlin/Native.