Flutter 개발 상자

[Flutter] [Camera] void android.hardware.camera2.CameraCaptureSession.close() 오류 해결 본문

Flutter/오류해결

[Flutter] [Camera] void android.hardware.camera2.CameraCaptureSession.close() 오류 해결

망고상자 2023. 12. 27. 18:37
728x90

오류 분석

 

발생 조건

해당 오류의 발생 조건은 명확히 밝혀진게 없다.

플러터의 공식 패키지인 Camera 패키지를 사용할때 Android 기기에서 종종 발생하며 재현을 하려고 해도 재현자체가 쉽지 않아서 디버깅 자체가 굉장히 힘들다.

보통 플러터에서 발생한 에러는 앱이 크러쉬(팅김 현상)되는 일은 없는데 이 오류는 네이티브 영역에서 충돌이 발생하여 앱 자체가 아예 꺼져버리는 치명적인 에러이다.

 

에러의 역사

https://github.com/flutter/flutter/issues/114012

해당 에러는 이미 1년 전부터 발생한것으로 카메라 패키지는 공식패키지임에도 불구하고 자잘한 오류나 버그가 많고 업데이트도 좀 늦는편이라 패키지 자체적으로 수정을 기대하기는 좀 힘들 것 같다.

이를 대체할 서드파티 패키지도 마땅한게 없다.

 

해결방법

 

CameraX 라이브러리 추가

해결 방법은 위의 이슈에서 나온 내용을 바탕으로 손쉽게 해결이 가능했다.

다만 카메라의 몇가지 기능을 포기해야했기에 카메라의 여러 기능을 사용하고 있다면 이는 해결책이 될 수 없다.

https://pub.dev/packages/camera_android_camerax

 

camera_android_camerax | Flutter Package

Android implementation of the camera plugin using the CameraX library.

pub.dev

 

위의 페이지로 이동 후, 지원되지 않는 기능 목록을 살펴보고 딱히 사용하고 있지 않다면 아래와 같이 패키지를 추가해준다.

  camera: ^0.10.5+7
  camera_android_camerax: ^0.5.0+24

 

기존 코드는 수정할 필요가 없다. 패키지를 추가하는것 만으로 기존 카메라 패키지에서 사용하는 내부 모듈이 변화하기 때문이다.

 

진짜 해결됐는지 어떻게 알지?

아쉽게도 나는 이 오류의 재현 방법을 알아내지 못했다.

따라서 오류를 수정했다고 하더라도 테스트단계에서 오류가 해결됐는지 검증하기는 어려웠다.

대신 파이어베이스 크래시리틱스를 등록해두고 해당 업데이트 이후 버전에서 똑같은 에러가 발생하는지를 살펴봤는데 다행히 똑같은 에러가 더 이상 발생하진 않았다.

 

 

요약

  • android camerax 패키지를 추가해주자.

 

728x90