Android 시스템 폰트 반복기 버그 사냥: 숨겨진 심볼의 이야기

2025-06-02

이 블로그 게시물에서는 놀랍도록 오래 걸린 버그 수정에 대해 설명합니다. Android는 서로 다른 API 레벨을 정의하며, 일부 심볼은 특정 버전부터만 사용할 수 있습니다. Android용 Firefox(Fenix)는 API 29부터만 사용할 수 있는 `ASystemFontIterator_open`을 사용합니다. 하위 호환성을 위해 Fenix는 컴파일 타임과 런타임 검사에 `__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__` 및 `__builtin_available`을 사용합니다. 그러나 Firefox의 빌드 시스템은 기본적으로 숨김 가시성(`-fvisibility=hidden`)을 사용하므로, 약한 심볼 `ASystemFontIterator_open`이 공유 라이브러리에서 정의되지 않아 충돌이 발생합니다. 수정 방법은 Android 시스템 헤더를 포함할 때 기본 가시성을 일시적으로 변경하는 간단한 방법이었습니다.

개발