Android 系统字体迭代器 Bug 侦探记
2025-06-02
这篇博文讲述了一个持续时间比预期更长的 Bug 修复过程。Android 系统定义了不同的 API 级别,某些符号仅在特定 API 版本中可用。Firefox Android 版 (Fenix) 使用 `ASystemFontIterator_open`,但它仅在 API 29 及更高版本可用。为了兼容旧版 API,Fenix 使用了 `__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__` 和 `__builtin_available` 进行编译时和运行时检查。然而,由于 Firefox 的构建系统默认使用隐藏可见性 (`-fvisibility=hidden`),导致弱符号 `ASystemFontIterator_open` 在共享库中变为未定义,最终导致崩溃。修复方法是临时更改包含 Android 系统头文件时的默认可见性。
开发