android-jetpack-composewear-osandroid-jetpack-compose-material3

WearOS Horologist ScreenScaffold NoSuchMethodError


I'm trying to make a wearOS app with scrollable content, and the documentation suggests using ScreenScaffold to show the scroll bar on the right side. But my app keeps crashing when this composable is called with the following error:

java.lang.NoSuchMethodError: No static method OnFocusChange(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V in class Landroidx/wear/compose/foundation/HierarchicalFocusCoordinatorKt; or its super classes (declaration of 'androidx.wear.compose.foundation.HierarchicalFocusCoordinatorKt' appears in /data/app/~~sBQFH3NmHEUFy7RI239d0w==/com.*APP_NAME*==/base.apk!classes10.dex)

All other composables work fine, but this one doesn't. I've looked into including the missing function in the proguard-rules.pro file, but that didn't do the trick.

(Edit) Here is my build.gradle.kts file:

plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.jetbrains.kotlin.android)
    alias(libs.plugins.kotlin.compose)
}

android {
    namespace = "*NAMESPACE*"
    compileSdk = 36

    defaultConfig {
        applicationId = "*APP_PACKAGE*"
        minSdk = 30
        targetSdk = 36
        versionCode = 1
        versionName = "1.0"

    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }
    kotlin {
        jvmToolchain(11)
    }
    useLibrary("wear-sdk")
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.1"
    }
}

dependencies {
    // JSON
    implementation(libs.gson)

    // Charts
    implementation(libs.mpandroidchart)

    // Material Design
    implementation(libs.material3)

    implementation(libs.kotlinx.coroutines.android)

    implementation(libs.play.services.wearable)
    implementation(platform(libs.androidx.compose.bom))
    implementation(libs.androidx.ui)
    implementation(libs.androidx.ui.graphics)
    implementation(libs.androidx.ui.tooling.preview)
    implementation(libs.androidx.compose.material)
    implementation(libs.androidx.compose.foundation)
    implementation(libs.androidx.wear.tooling.preview)
    implementation(libs.androidx.activity.compose)
    implementation(libs.androidx.core.splashscreen)
    implementation(libs.animation.graphics.android)
    implementation(libs.androidx.compose.material3)
    implementation(libs.horologist.composables)
    implementation(libs.horologist.compose.layout)
    implementation(libs.horologist.media.ui)
    implementation(libs.horologist.tiles)
    implementation(libs.androidx.wear.phone.interactions)
    implementation(libs.androidx.appcompat)
    implementation(libs.material)
    implementation(libs.androidx.activity)
    implementation(libs.androidx.constraintlayout)
    androidTestImplementation(platform(libs.androidx.compose.bom))
    androidTestImplementation(libs.androidx.ui.test.junit4)
    debugImplementation(libs.androidx.ui.tooling)
    debugImplementation(libs.androidx.ui.test.manifest)
}

Any help would be greatly appreciated!


Solution

  • OnFocusChange in HierarchicalFocusCoordinator was removed in Wear Compose 1.5.0-alpha14.

    Horologist is currently using 1.5.0-beta06 which contains those changes.

    I guess you are using a version of Material3 that does not have OnFocusChange and an old version of Horologist that uses OnFocusChange.

    Please update Horologist to the latest version.