عن المشروع
يحتوي هذا المستودع على تطبيقات أندرويد الرسمية من Bitwarden، والتي تجمع بين مدير كلمات المرور وأداة المصادقة في عميل محمول واحد. يستهدف المشروع أندرويد 10 (SDK 29) كحد أدنى وأندرويد 17 (SDK 37) كهدف، ويدعم كل من الهواتف والأجهزة اللوحية في الاتجاهين الرأسي والأفقي.
كُتبت قاعدة التعليمات البرمجية بلغة Kotlin وتستخدم Jetpack Compose كإطار عمل للواجهة التصريحية، إلى جانب مجموعة واسعة من مكتبات AndroidX بما في ذلك Activity وAppcompat وAutofill وBiometrics وBrowser وCamera وCore وCredentials وLifecycle وNavigation وRoom وSecurity وWorkManager. يتم حقن التبعيات عبر Dagger Hilt، وتحميل الصور عبر Glide، والشبكات عبر Retrofit 2 وOkHttp 3. تدعم Coroutines وKotlin والمجموعات غير القابلة للتغيير ومكتبات التسلسل الكود غير المتزامن والتفاعلي، بينما يوفر Timber التسجيل ويتعامل ZXing مع مسح الرموز الشريطية لرموز المصادقة.
يُصدر التطبيق بنسختين للبناء. تتضمن الإصدارات القياسية Firebase Cloud Messaging للإشعارات الفورية، وFirebase Crashlytics للإبلاغ عن الأعطال، وتكامل مراجعات Google Play. أما إصدارات F-Droid فتستبعد هذه المكونات المعتمدة على Google، مما يبقي التطبيق خالياً من الخدمات الاحتكارية.
يتطلب التطوير JDK 21 وAndroid Studio، مع مخطط نمط كود خاص بالمشروع (bitwarden-style.xml) يستورده المساهمون في بيئة التطوير الخاصة بهم. يلزم رمز وصول شخصي من GitHub بنطاق read:packages لسحب التبعيات من GitHub Packages، ويمكن لعلامة localSdk توجيه SDK إلى مستودع Maven محلي للمساهمين الذين يعملون على ميزات SDK. يتم فرض جودة الكود عبر تحليل detekt الثابت، مع خطاف اختياري قبل الالتزام يشغل detekt قبل كل التزام. يعتمد الاختبار على JUnit 5 وMockK وRobolectric وTurbine لاختبارات تدفق Coroutines. تستخدم CI/CD أداة Fastlane للبناء والتوقيع والتوزيع، وKover لتغطية كود Kotlin.
يوثق ملف README أيضاً سير عمل واضح للمساهمة: إبقاء تغييرات التنسيق منفصلة عن التغييرات المنطقية، وتنسيق الكود قبل تقديم طلبات السحب، واتباع وثائق النمط وأفضل الممارسات الخاصة بالمشروع. بشكل عام، هذا عميل أندرويد مفتوح المصدر ناضج ومنظم جيداً لخدمة إدارة كلمات المرور والمصادقة الثنائية المستخدمة على نطاق واسع.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.