서론

해당 포스트는 현재 Compose 개발 시 발생한 Exception 및 버그를 어떻게 해결 했는 지에 대해 다루는 포스트이며 Compose는 아직 알파 버전이기 때문에 이전에 적용했던 해결 방안이 새로운 Compose 버전이 업데이트 되면서 적용이 안될수도 있음을 명심하시길 바랍니다.

java.lang.NoSuchMethodError: No static method drawRect 발생

발생 원인

ScaffoldLazyList 를 사용했을 시 아래와 같이 Exception이 발생함

java.lang.NoSuchMethodError: No static method drawRect-w2WG-Gw$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/ui/graphics/BlendMode;ILjava/lang/Object;)V in class Landroidx/compose/ui/graphics/drawscope/DrawScope$DefaultImpls; or its super classes (declaration of 'androidx.compose.ui.graphics.drawscope.DrawScope$DefaultImpls' appears in /data/app/com.example.listsample-PfSvYy5TEHC73HGmesZBpQ==/base.apk)
        at androidx.compose.foundation.Background.drawRect(Background.kt:111)
        at androidx.compose.foundation.Background.draw(Background.kt:103)
        at androidx.compose.ui.node.ModifiedDrawNode.performDraw(ModifiedDrawNode.kt:102)
        at androidx.compose.ui.node.LayoutNodeWrapper$invoke$1.invoke(LayoutNodeWrapper.kt:260)
        at androidx.compose.ui.node.LayoutNodeWrapper$invoke$1.invoke(LayoutNodeWrapper.kt:259)
        at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:121)
        at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:75)
        at androidx.compose.ui.node.LayoutNodeWrapper.invoke(LayoutNodeWrapper.kt:259)
        at androidx.compose.ui.node.LayoutNodeWrapper.invoke(LayoutNodeWrapper.kt:53)
        at androidx.compose.ui.platform.ViewLayer.dispatchDraw(ViewLayer.android.kt:240)

해결 방안 (21.06.09 기준)

  1. Project 폴더 Root 의 build.gradle를 아래와 같이 수정
buildscript {
    ext {
        compose_version = '1.0.0-beta08' // 1. compose 버전 수정
    }
    ...
    dependencies {
      ...
      classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.10" // 2. Kotin plugin 버전 수정

    }
    ...
}
  1. Project 폴더에서 app 의 build.gradle를 아래와 같이 수정
...
android {
    ...
    composeOptions {
        kotlinCompilerExtensionVersion compose_version
        kotlinCompilerVersion '1.5.10' // 1. kotlin compile 버전 수정
    }
}

java.lang.NoSuchMethodError startRestartGroup 발생

발생 원인

Compose 버전을 ‘1.0.0-beta08’ 로 업그레이드 시 coil 라이브러리에서 아래와 같이 Exception 발생

No interface method startRestartGroup(ILjava/lang/String;)Landroidx/compose/runtime/Composer; in class Landroidx/compose/runtime/Composer; or its super classes (declaration of 'androidx.compose.runtime.Composer' 
....
 at com.google.accompanist.coil.CoilImage__CoilKt.CoilImage(Coil.kt:245)
        at com.google.accompanist.coil.CoilImage.CoilImage(Coil.kt:1)

해결 방안 (2021.06.09 기준)

coil 라이브러리를 아래와 같이 최선 버전으로 업그레이드

implementation "com.google.accompanist:accompanist-coil:0.10.0"

댓글남기기