Runique
متتبع جري متقدم يزامن البيانات لحظياً بين الهاتف والساعة الذكية.
- السنة
- ٢٠٢٤
- النوع
- Course Project
نظرة عامة
يربط Runique تطبيقاً مرافقاً على الهاتف بساعة Wear OS لتتبع الجري لحظياً. تتبع جري كامل من البداية للنهاية يعني تزامناً مستمراً للبيانات بين الساعة والهاتف المضيف، بيانات جغرافية مكانية في الوقت الفعلي، عرض خرائط، وواجهات Android Health Services.
التحدي
تطبيقات اللياقة البدنية تحتاج دقة. وضع Doze يقتل عمليات الخلفية، زمن الشبكة يتذبذب أثناء الجري، والتدفق غير المتزامن للبيانات بين الهاتف وساعة Wear OS يتسبب عادةً في مشاكل مزامنة.
كان الهدف: الحفاظ على تتبع GPS لحظي على خرائط Google مع التقاط مقاييس صحية من الساعة، دون استنزاف البطارية أو توقف النظام عند انعدام التغطية الخلوية.
القرارات المعمارية والتقنية
ينقسم Runique إلى وحدات معزولة (App و Auth و Run و Analytics و Wear) على نهج المعمارية النظيفة.
مسار المزامنة
- تغليف الميزات: إضافات Gradle Convention مخصّصة تغلّف الميزات وتُسرّع البناء.
- العمل دون اتصال: قاعدة Room المحلية هي مصدر الحقيقة. تصل البيانات الحيوية من Wear OS Health Services إلى مخازن محلية أولًا، ثم يرسلها Ktor كحزم إلى الخادم عند توفّر الشبكة.
- Flow و Turbine: إحداثيات الـ GPS عالية التردّد، لذا يعتمد المسار على مشغّلات Kotlin Flow. واستخدمت Turbine في وحدات الاختبار لتثبيت تأكيدات الحالة غير المتزامنة في CI.
الكود المشترك مقابل نطاق المنصة
بدل تكرار المنطق، تخدم طبقتا الـ domain والـ data الهاتف والساعة معًا، بينما تحقن كل وحدة عرض نظام تصميمها عبر Koin: Material 3 للهاتف، ونظام Wear OS أصغر للساعة.
الأثر والنتائج
- تزامن دون الثانية بين الساعة والهاتف لمقاييس الصحة اللحظية.
- تسجيل GPS مستمر عبر انقطاعات التغطية الخلوية ودورات وضع Doze.
- بناء أسرع بفضل dynamic feature modularization وإضافات Gradle المخصصة.