مطاردة أخطاء مُكرّر خطوط النظام في أندرويد: قصة الرموز المخفية
2025-06-02
تروي هذه المدونة قصة تصحيح خطأ طويل بشكل مدهش. يُعرّف نظام أندرويد مستويات مختلفة من واجهة برمجة التطبيقات، حيث تتوفر بعض الرموز فقط من إصدار معين. يستخدم Firefox لنظام أندرويد (Fenix) `ASystemFontIterator_open`، والذي لا يتوفر إلا من API 29. من أجل التوافق مع الإصدارات السابقة، يستخدم Fenix `__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__` و `__builtin_available` للتحقق في وقت التجميع والتشغيل. ومع ذلك، فإن نظام بناء Firefox يستخدم بشكل افتراضي الإمكانية المخفية (`-fvisibility=hidden`)، مما يجعل الرمز الضعيف `ASystemFontIterator_open` غير مُعرّف في مكتبة المُشاركة، مما يؤدي إلى تعطل النظام. تمثلت الحل في تغيير بسيط لتعديل مؤقتًا إمكانية الوصول الافتراضية عند تضمين عناوين نظام أندرويد.
التطوير
تصحيح الخطأ