OOZOU
تواصلوا معنا
العودة إلى المدونة

استخدام Dagger Hilt في تطبيقات Android

كيف تستخدمون dagger-hilt لتحسين سير العمل عند تطوير تطبيقات Android

14 نوفمبر 2020
3 دقائق للقراءة
استخدام Dagger Hilt في تطبيقات Android

أفترض في هذا المقال أن القارئ يملك فهمًا جيدًا لأساسيات kotlin وdagger وdagger-android.

الوضع الحالي مع Dependency Injection

إن كنتم تعملون في تطوير Android منذ فترة، فالأرجح أنكم استخدمتم أدوات مثل dagger وdagger-android للتعامل مع حقن التبعيات (dependency injection) في تطبيقاتكم. وأنا واثق أننا جميعًا نعرف جيدًا حجم الكود الذي نكتبه لإعداد التبعيات. فغالبًا ما اضطررتم إلى إنشاء واجهة ApplicationComponent، وعدة dagger modules للـ activities وfragments، ومع ذلك احتجتم إلى ربط factories حتى تتمكنوا من حقن الـ view models. ولا تنتهي المتاعب هنا، إذ عليكم تكرار هذه الخطوات كلها من جديد لإجراء أي integration testing ذي قيمة. من الواضح أن مكتبة dagger-android قد تبدأ في التحول إلى عبء.

لماذا Hilt؟

تعالج مكتبة dagger-hilt تقريبًا جميع المشكلات المذكورة أعلاه. وهذه بعض مزايا استخدام hilt:

  • كود boilerplate أقل
  • فصل اعتماديات البناء (build dependencies)
  • إعداد أبسط
  • اختبارات أفضل
  • مكوّنات موحّدة (standardized components)

لمعرفة المزيد عن مزايا Hilt، اطلعوا على Why Hilt على Dagger Dev

كفى كلامًا، أرونا الكود

لاستخدام Hilt، أضيفوا اعتماديات البناء التالية إلى ملف build.gradle الخاص بـ Android Gradle module:

apply plugin: 'dagger.hilt.android.plugin'

dependencies {
  implementation 'com.google.dagger:hilt-android:<VERSION>'
  kapt 'com.google.dagger:hilt-android-compiler:<VERSION>'
  // For instrumentation tests
  androidTestImplementation 'com.google.dagger:hilt-android-testing:2.28-alpha'
  kaptAndroidTest 'com.google.dagger:hilt-android-compiler:2.28-alpha'
  // For local unit tests
  testImplementation 'com.google.dagger:hilt-android-testing:2.28-alpha'
  kaptTest 'com.google.dagger:hilt-android-compiler:2.28-alpha'
}

kapt {
  correctErrorTypes true
}

أضيفوا ما يلي إلى ملف build.gradle الخاص بالمشروع

buildscript {
  repositories {
    <em>// other repositories...</em>
    mavenCentral()
  }
  dependencies {
    <em>// other plugins...</em>
    classpath 'com.google.dagger:hilt-android-gradle-plugin:<version>'
  }
}

تطبيق Hilt يجب أن يحتوي كل تطبيق يستخدم Hilt على فئة Application موسومة بـ @HiltAndroidApp. تُطلق @HiltAndroidApp عملية توليد الكود لـ Hilt components، وتولّد أيضًا فئة أساسية لتطبيقكم تستخدم هذه المكوّنات المولّدة

@HiltAndroidApp
public final class MyApplication extends Application {}

لتفعيل حقن الأعضاء (members injection) في الـ activity، ضعوا على الفئة الوسم @AndroidEntryPoint.

@AndroidEntryPoint
public final class MainActivity extends MyBaseActivity {
  @Inject Foo foo; <em>// Bindings in SingletonComponent or ActivityComponent</em>

  @Override
  public void onCreate() {
    <em>// Injection happens in super.onCreate().</em>
    super.onCreate();

    <em>// Do something with foo ...</em>
  }
}

استخدام Hilt مع ViewModels

يتضمن Hilt امتدادات لتوفير فئات من مكتبات Jetpack الأخرى. ويدعم Hilt حاليًا مكوّنات Jetpack التالية: ViewModels وWorkManager أضيفوا ما يلي إلى app/build.gradle

dependencies {
  ...
  implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha01'
  kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
}

وفّروا الـ ViewModel باستخدام الوسم @ViewModelInject في constructor كائن ViewModel. ويجب أيضًا وسم الاعتمادية SavedStateHandle بـ @Assisted:

class ExampleViewModel @ViewModelInject constructor(
  private val repository: ExampleRepository,
  @Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel() {
  ...
}

بعد ذلك، يمكن لأي activity أو fragment موسوم بـ @AndroidEntryPoint الحصول على نسخة الـ ViewModel كالمعتاد باستخدام ViewModelProvider أو by viewModels()

@AndroidEntryPoint
class ExampleActivity : AppCompatActivity() {
  private val exampleViewModel: ExampleViewModel by viewModels()
  ...
}

Hilt Modules

الـ Hilt modules هي Dagger modules عادية مع وسم إضافي هو @InstallIn، يحدد Hilt component(s) التي سيُثبَّت فيها الـ module.

@Module
@InstallIn(SingletonComponent.class) <em>// Installs FooModule in the generate SingletonComponent.</em>
public final class FooModule {
  @Provides
  static Foo provideFoo() {...}
}

رائع! أصبحتم جاهزين لبدء استخدام hilt في تطبيق Android الخاص بكم. شخصيًا، وجدت تطبيق Hilt سهلًا مقارنة بـ dagger. وإن شعرتم بالشيء نفسه بعد تجربة ما سبق، فجرّبوه في مشروعكم القادم.

Related Articles

كيف أصمّم برمجيات؟ دليل المبتدئين لأصحاب الأعمال

كيف أصمّم برمجيات؟ دليل المبتدئين لأصحاب الأعمال

تصميم البرمجيات عملية ممتعة لكنها معقدة، تتطلب الإبداع والتفكير المنطقي ومهارات حل المشكلات.

اقرأوا المزيد
مستقبل الحوسبة الطرفية: ما تحتاج الشركات إلى معرفته

مستقبل الحوسبة الطرفية: ما تحتاج الشركات إلى معرفته

يتطور المشهد الرقمي بسرعة، وعلى الشركات أن تتكيّف لتواكب الطلب المتزايد على السرعة والكفاءة والمعالجة في الوقت الفعلي.

اقرأوا المزيد
مستقبل قطاع التجزئة: الذكاء الاصطناعي والواقع المعزّز واتجاهات التحوّل الرقمي

مستقبل قطاع التجزئة: الذكاء الاصطناعي والواقع المعزّز واتجاهات التحوّل الرقمي

يتطور قطاع التجزئة بوتيرة غير مسبوقة بفضل الذكاء الاصطناعي (AI) والواقع المعزّز (AR) وتقنيات التحوّل الرقمي. فلم تعد المتاجر التقليدية مجرد أماكن لبيع المنتجات، بل أصبحت متاجر ذكية وتفاعلية.

اقرأوا المزيد

Have a Project in Mind?

Let's discuss how we can help bring your ideas to life with our expertise in web and mobile development.

ابدأوا المحادثةhello@oozou.com
OOZOU Logo

بانكوك · سنغافورة · هونغ كونغ

X
Facebook
Instagram
LinkedIn
OOZOU Co., Ltd.
548 One City Centre
Ploenchit Road
Bangkok 10330
Thailand
+66 2544 0000
hello@oozou.com

الخدمات

  • تطوير الويب
  • وكلاء الذكاء الاصطناعي والذكاء الاصطناعي التوليدي
  • تطوير تطبيقات الجوال
  • تحليلات البيانات وهندستها
  • تصميم تجربة المستخدم وواجهته (UX/UI) وتصميم المنتجات
  • التحوّل الرقمي

الشركة

  • من نحن
  • الوظائف
  • المدونة
  • دراسات الحالة
  • عروض حية
  • تعلّمت اليوم
  • تواصل معنا

المزيد

  • القطاعات
  • شبكة الشركاء
© 2026 OOZOU. جميع الحقوق محفوظة.
سياسة الخصوصيةمدونة قواعد السلوكسياسة مكافحة الرشوة والفساد