debug 모드
에는 문제가 없으나, release 모드
에서 화면을 스크롤하는 제스쳐를 하면 다음과 같은 예외가 발생합니다.
java. lang.NoSuchMethodError: No interface method getMaximumFlingVelocity()
보통 debug 모드에서는 되고 release 모드에서 안 되면 난독화 문제인 경우가 많기 때문에 proguard-rules.pro
에 여러가지 룰을 추가해봤지만 해결되지 않았습니다.
결국 필자의 난독화 문제가 아닐 수 있겠다는 생각이 들어 다른 시도를 해보았습니다.
이전에는 release 모드에서도 해당 문제가 발생하지 않았기 때문에 브랜치를 하나 분기하여 commit을 reset해가며 문제가 발생한 시점을 찾았습니다.
분기하고자 하는 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 또한 정상 동작하는 것을 확인하였습니다.
버전을 업그레이드하여 간단하게 해결하였지만 크래시를 해결하느라 오랜 시간 삽질하였습니다.. 🥲