Hi i created some module in my KMP app and i can't...
# compose
a
Hi i created some module in my KMP app and i can't use
debugImplementation
so i can't use @Preview.
debugImplementation
is not resolved this is module's gradle.
Copy code
plugins {

    alias(libs.plugins.kotlin.multiplatform)
    alias(libs.plugins.android.kotlin.multiplatform.library)
    alias(libs.plugins.android.lint)
    alias(libs.plugins.composeCompiler)
    alias(libs.plugins.compose.multiplatform)
    alias(libs.plugins.kotlin.serialization)
}

kotlin {

    androidLibrary {
        experimentalProperties["android.experimental.kmp.enableAndroidResources"] = true
    }
    androidLibrary {
        namespace = "com.plcoding.core.designsystem"
        compileSdk = 36
        minSdk = 24

        withHostTestBuilder {
        }

        withDeviceTestBuilder {
            sourceSetTreeName = "test"
        }.configure {
            instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        }
    }
    
    val xcfName = "core:designsystemKit"

    iosX64 {
        binaries.framework {
            baseName = xcfName
        }
    }

    iosArm64 {
        binaries.framework {
            baseName = xcfName
        }
    }

    iosSimulatorArm64 {
        binaries.framework {
            baseName = xcfName
        }
    }
    sourceSets {
        commonMain {
            dependencies {
                implementation(libs.kotlin.stdlib)

                implementation(projects.core.presentation)
                implementation(libs.jetbrains.compose.foundation)
                implementation(compose.components.resources)

                implementation(compose.components.uiToolingPreview)
                implementation(libs.material3.adaptive)
                implementation(libs.jetbrains.compose.ui)
                implementation(libs.jetbrains.compose.foundation)
                implementation(libs.jetbrains.compose.material3)
                implementation(libs.jetbrains.compose.material.icons.core)

            }
        }
        androidMain {
            dependencies {
               
                
          
            }
        }
        
        iosMain {
            dependencies {
            }
        }
    }
}
d
Hi @Android75, In a Kotlin Multiplatform (KMP) module,
debugImplementation
(and
releaseImplementation
) are Android-specific Gradle configurations. They are not automatically available in the
kotlin {}
block of a KMP module unless you’re explicitly in the Android-specific
android
Gradle block. That’s why
debugImplementation
is “not resolved.”
a
So i have to add a android block?
d
Yes
a
mmm i can't
Screenshot 2025-10-02 alle 17.33.59.png
i put android {} inside module's gradle
d
You cannot put
dependencies { debugImplementation(...) }
inside the
android { }
block. The Android Gradle plugin expects
dependencies { ... }
at the module level, not inside
android { }
. androidMain { dependencies { implementation(compose.components.uiToolingPreview) // @Preview works } } This works for Compose previews without needing
debugImplementation
No
android { dependencies { ... } }
required.
a
Copy code
androidMain {
    dependencies {
        implementation(compose.components.uiToolingPreview) 
        implementation("androidx.compose.ui:ui-tooling-preview:1.9.0")
        
    }
}
it does't work
image.png
this si module's gradle
Copy code
plugins {

    alias(libs.plugins.kotlin.multiplatform)
    alias(libs.plugins.android.kotlin.multiplatform.library)
    alias(libs.plugins.android.lint)
    alias(libs.plugins.composeCompiler)
    alias(libs.plugins.compose.multiplatform)
    alias(libs.plugins.kotlin.serialization)
}
kotlin {

    androidLibrary {
        experimentalProperties["android.experimental.kmp.enableAndroidResources"] = true
    }
    androidLibrary {
        namespace = "com.plcoding.core.designsystem"
        compileSdk = 36
        minSdk = 24

        withHostTestBuilder {
        }

        withDeviceTestBuilder {
            sourceSetTreeName = "test"
        }.configure {
            instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        }
    }

    val xcfName = "core:designsystemKit"

    iosX64 {
        binaries.framework {
            baseName = xcfName
        }
    }

    iosArm64 {
        binaries.framework {
            baseName = xcfName
        }
    }

    iosSimulatorArm64 {
        binaries.framework {
            baseName = xcfName
        }
    }
    sourceSets {
        commonMain {
            dependencies {
                implementation(libs.kotlin.stdlib)
                implementation(projects.core.presentation)
                implementation(libs.jetbrains.compose.foundation)
                implementation(compose.components.resources)
                implementation(compose.components.uiToolingPreview)
                implementation(libs.material3.adaptive)
                implementation(libs.jetbrains.compose.ui)
                implementation(libs.jetbrains.compose.foundation)
                implementation(libs.jetbrains.compose.material3)
                implementation(libs.jetbrains.compose.material.icons.core)

            }
        }
        androidMain {
            dependencies {
                implementation(compose.components.uiToolingPreview)
                implementation("androidx.compose.ui:ui-tooling-preview:1.9.0")

            }
        }
        iosMain {
            dependencies {
            }
        }
    }
}
i tryed other dependencies and nothing.. i don't see preview
d
You need to add
ui-tooling
as a debug dependency. In your module's
dependencies {}
(top-level, not in sourceSets):
Copy code
dependencies {
    debugImplementation("androidx.compose.ui:ui-tooling:1.9.0")
}
ui-tooling
must not be in
implementation
, because it will bloat your APK. That’s why
debugImplementation
is the right scope. Keep your actual
@Preview
functions in
androidMain
(not
commonMain
), otherwise Studio won’t find them.
Copy code
kotlin {
    androidLibrary()
    iosX64()
    iosArm64()
    iosSimulatorArm64()

    sourceSets {
        commonMain {
            dependencies {
                implementation(libs.kotlin.stdlib)
                implementation(projects.core.presentation)
                implementation(libs.jetbrains.compose.foundation)
                implementation(compose.components.resources)
                implementation(compose.components.uiToolingPreview) // preview annotation available everywhere
                implementation(libs.material3.adaptive)
                implementation(libs.jetbrains.compose.ui)
                implementation(libs.jetbrains.compose.foundation)
                implementation(libs.jetbrains.compose.material3)
                implementation(libs.jetbrains.compose.material.icons.core)
            }
        }
        androidMain {
            dependencies {
                implementation(compose.components.uiToolingPreview) // needed in Android
                implementation("androidx.compose.ui:ui-tooling-preview:1.9.0")
            }
        }
    }
}

dependencies {
    // Needed so Studio can actually render the previews
    debugImplementation("androidx.compose.ui:ui-tooling:1.9.0")
}
a
In
ok but i repeat... i put debugImplementation in top module's gradle... and it does't work
I put dependencies {debugImplementation(.... top and aftet below.. but i have same problem
this is gradle: core:desisnsystem module
Copy code
plugins {

    alias(libs.plugins.kotlin.multiplatform)
    alias(libs.plugins.android.kotlin.multiplatform.library)
    alias(libs.plugins.compose.multiplatform)
    alias(libs.plugins.composeCompiler)
    alias(libs.plugins.kotlin.serialization)
}

kotlin {

    androidLibrary {
        experimentalProperties["android.experimental.kmp.enableAndroidResources"] = true

    }
    androidLibrary {

        namespace = "com.plcoding.core.designsystem"
        compileSdk = 36
        minSdk = 24

        withHostTestBuilder {
        }

        withDeviceTestBuilder {
            sourceSetTreeName = "test"
        }.configure {
            instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        }
    }

    val xcfName = "core:designsystemKit"

    iosX64 {
        binaries.framework {
            baseName = xcfName
        }
    }

    iosArm64 {
        binaries.framework {
            baseName = xcfName
        }
    }

    iosSimulatorArm64 {
        binaries.framework {
            baseName = xcfName
        }
    }
    sourceSets {
        commonMain {
            dependencies {
                implementation(libs.kotlin.stdlib)
                implementation(projects.core.presentation)
                implementation(libs.jetbrains.compose.foundation)
                implementation(compose.components.resources)
                implementation(compose.components.uiToolingPreview)
                implementation(libs.material3.adaptive)
                implementation(libs.jetbrains.compose.ui)
                implementation(libs.jetbrains.compose.foundation)
                implementation(libs.jetbrains.compose.material3)
                implementation(libs.jetbrains.compose.material.icons.core)

            }
        }
        androidMain {
            dependencies {
                implementation(compose.components.uiToolingPreview) // needed in Android
                implementation("androidx.compose.ui:ui-tooling-preview:1.9.0")
            }
        }
        iosMain {
            dependencies {
            }
        }
    }
}
dependencies {
    // Needed so Studio can actually render the previews
    debugImplementation("androidx.compose.ui:ui-tooling:1.9.0")
}
d
Ah.. I see. Keep
ui-tooling-preview
in
androidMain
Move
debugImplementation(ui-tooling)
into `androidMain`’s dependencies block, not top-level. Don’t try to put a
dependencies { debugImplementation(...) }
after the
kotlin {}
block in KMP.
Copy code
sourceSets {
    androidMain {
        dependencies {
            implementation(compose.components.uiToolingPreview) // annotation
            implementation("androidx.compose.ui:ui-tooling-preview:1.9.0")
            debugImplementation("androidx.compose.ui:ui-tooling:1.9.0") // <- put here, not top-level
        }
    }
}
a
i can't use debugImplementation inside a module
i repeat... debugImplementation does't work... this is my gradle:
Copy code
plugins {

    alias(libs.plugins.kotlin.multiplatform)
    alias(libs.plugins.android.kotlin.multiplatform.library)
    alias(libs.plugins.compose.multiplatform)
    alias(libs.plugins.composeCompiler)
    alias(libs.plugins.kotlin.serialization)
}

kotlin {

    androidLibrary {
        experimentalProperties["android.experimental.kmp.enableAndroidResources"] = true

    }
    androidLibrary {

        namespace = "com.plcoding.core.designsystem"
        compileSdk = 36
        minSdk = 24

        withHostTestBuilder {
        }

        withDeviceTestBuilder {
            sourceSetTreeName = "test"
        }.configure {
            instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        }
    }

    val xcfName = "core:designsystemKit"

    iosX64 {
        binaries.framework {
            baseName = xcfName
        }
    }

    iosArm64 {
        binaries.framework {
            baseName = xcfName
        }
    }

    iosSimulatorArm64 {
        binaries.framework {
            baseName = xcfName
        }
    }
    sourceSets {
        commonMain {
                dependencies {
                implementation(libs.kotlin.stdlib)
                implementation(projects.core.presentation)
                implementation(libs.jetbrains.compose.foundation)
                implementation(compose.components.resources)
                implementation(compose.components.uiToolingPreview)
                implementation(libs.material3.adaptive)
                implementation(libs.jetbrains.compose.ui)
                implementation(libs.jetbrains.compose.foundation)
                implementation(libs.jetbrains.compose.material3)
                implementation(libs.jetbrains.compose.material.icons.core)

            }
        }
        androidMain {
            dependencies {
                implementation(compose.components.uiToolingPreview) // annotation
                implementation("androidx.compose.ui:ui-tooling-preview:1.9.0")
                debugImplementation("androidx.compose.ui:ui-tooling:1.9.0") // <- put here, not top-level
            }
        }
        iosMain {
            dependencies {
            }
        }
    }
}
m
The directory to put files in is
src/androidDebug
https://www.jetbrains.com/help/kotlin-multiplatform-dev/multiplatform-android-layout.html#move-the-androidmanifest-xml-file So I would expected
Copy code
kotlin {
    sourceSets { 
        androidDebug {
            implementation("...")
        }
    }
}
The IDE doesn't recognize it so I don't know if that is right.
k
Copy code
androidLibrary
has problems with previews
a
i ddn't resolve 😞 i can't see preview
i created a project, a simple example and i can't see the Preview inside module https://github.com/giuseppesorce/testmodulekmp
I resolved with this... very strange:
Copy code
androidMain {
            dependencies {
                implementation(compose.uiTooling)
                implementation(compose.preview)
                implementation(libs.androidx.activity.compose)
                implementation("androidx.emoji2:emoji2:1.5.0")
                implementation("androidx.customview:customview-poolingcontainer:1.1.0")
            }
        }