[Android] Compose: No interface method getMaximumFlingVelocity()

부나·2024년 2월 29일
0

안드로이드

목록 보기
8/12

문제 상황

debug 모드 에는 문제가 없으나, release 모드 에서 화면을 스크롤하는 제스쳐를 하면 다음과 같은 예외가 발생합니다.

java. lang.NoSuchMethodError: No interface method getMaximumFlingVelocity()

보통 debug 모드에서는 되고 release 모드에서 안 되면 난독화 문제인 경우가 많기 때문에 proguard-rules.pro 에 여러가지 룰을 추가해봤지만 해결되지 않았습니다.

결국 필자의 난독화 문제가 아닐 수 있겠다는 생각이 들어 다른 시도를 해보았습니다.
이전에는 release 모드에서도 해당 문제가 발생하지 않았기 때문에 브랜치를 하나 분기하여 commit을 reset해가며 문제가 발생한 시점을 찾았습니다.

Tip. 새로운 브랜치와 함께 원하는 commit으로 이동하기

분기하고자 하는 commit을 우클릭하여 New Branch... 을 클릭하면 새로운 브랜치와 함께 해당 시점으로 되돌릴 수 있습니다.

그러다가 한 가지 의심이 되는 commit을 발견했습니다.

[이전 포스팅] Compose 사용 시 Layout Inspector Nothing to show 해결방법에서 다뤘듯 기존에는 compose-bom:2023.03.00 을 사용하고 있었지만, Layout Inspector가 동작하지 않는다는 이유로 compose.ui 의존성만 1.6.2로 버전업 하였습니다.

하지만 해당 commit을 기준으로 release 모드에서 화면을 스크롤하면 크래시가 발생하였습니다.

해결 방법

대략 1년 전 버전인 compose-bom:2023.03.00 에서는 정상적으로 동작하는 것으로 보아 최신 compose-ui의 버전에 문제가 있다고 판단하였습니다.

Compose UI 버전 명세서를 살펴본 결과, 1.6.0-beta01 버전에 maximumFlingVelocity과 관련된 의심되는 업데이트 로그가 하나 있었습니다.
또한, 현재 프로젝트의 compose 관련 라이브러리 버전이 모두 다르게 설정되어 있었습니다.

compose-bom을 적극 활용하여 버전 통합을 채택하였습니다.

최종적으로 compose-bom 버전을 최신화하고 하나로 통합하니 간단하게 문제가 해결되었습니다.

현 시점에서 가장 최신 버전인 2024.02.01 으로 통합하였습니다.
implementation(platform("androidx.compose:compose-bom:2024.02.01"))

이후에 release 모드에서 재실행 해보았고 별도의 크래시가 발생하지 않았으며, Layout Insepctor 또한 정상 동작하는 것을 확인하였습니다.

버전을 업그레이드하여 간단하게 해결하였지만 크래시를 해결하느라 오랜 시간 삽질하였습니다.. 🥲

profile
망각을 두려워하는 안드로이드 개발자입니다 🧤

0개의 댓글