حل مشكل رسالة خطأ Compile و Implementation على Android Studio - عصام برو
حل مشكل رسالة خطأ Compile و Implementation على Android Studio

حل مشكل رسالة خطأ Compile و Implementation على Android Studio

شارك المقالة
حل مشكل رسالة خطأ Compile و Implementation على Android Studio

إضافة تبعيات بناء build dependencies


يسهّل نظام إنشاء Gradle في Android Studio تضمين الثنائيات الخارجية أو وحدات المكتبة الأخرى في البنية كتركيبات. يمكن أن تكون الاعتمادات موجودة على جهازك أو في مستودع بعيد ، وأي تبعيات متعدية يتم الإعلان عنها يتم تضمينها تلقائيًا أيضًا. توضح هذه الصفحة كيفية استخدام التبعيات مع مشروع Android الخاص بك ، بما في ذلك تفاصيل حول السلوكيات والتكوينات الخاصة بمكوّن Android الإضافي لـ Gradle. للحصول على دليل مفاهيمي أكثر عمقًا لاعتماديات Gradle ، يجب أن ترى أيضًا دليل Gradle لمدير التبعية - ولكن تذكر أن مشروع Android الخاص بك يجب أن يستخدم فقط تكوينات التبعية المحددة في هذه الصفحة.

تحذير: عند تحديد التبعيات ، يجب عدم استخدام أرقام الإصدارات الديناميكية ، مثل "+.com.android.tools.build:gradle:3". يمكن أن يتسبب استخدام هذه الميزة في حدوث تحديثات إصدار غير متوقعة وصعوبة في حل الاختلافات في الإصدارات.

أنواع التبعية Dependency types


لإضافة تبعية إلى مشروعك ، حدد تكوين تبعية مثل التنفيذ في كتلة التبعية لملف build.gradle الخاص بك. على سبيل المثال ، يشتمل ملف build.ragdle التالي لوحدة برامج التطبيق على ثلاثة أنواع مختلفة من التبعيات:

apply plugin: 'com.android.application'
android { ... }
dependencies {
// Dependency on a local library module implementation project(":mylibrary")
// Dependency on local binaries implementation fileTree(dir: 'libs', include: ['*.jar'])
// Dependency on a remote binary implementation 'com.example.android:app-magic:12.3'
}

كل من هذه الطلبات يتطلب نوعًا مختلفًا من الاعتماد على المكتب كما يلي:

تبعية وحدة المكتبة المحلية Local library module dependency


implementation project(':mylibrary') 
 يوضح هذا تبعية على وحدة مكتبة Android تسمى "mylibrary" (يجب أن يتطابق هذا الاسم مع اسم المكتبة المحدد مع تضمين: في ملف settings.gradle الخاص بك). عند إنشاء تطبيقك ، يقوم نظام الإنشاء بتجميع وحدة المكتبة وتحميل المحتويات المترجمة الناتجة في ملف APK.

الاعتماد الثنائي المحلي Local binary dependency


implementation fileTree(dir: 'libs', include: ['*.jar'])
يعلن Gradle التبعيات على ملفات JAR داخل الدليل module_name / libs / الخاص بالمشروع (لأن Gradle يقرأ المسارات المتعلقة بالملف build.gradle).

بدلا من ذلك ، يمكنك تحديد الملفات الفردية على النحو التالي:
implementation files('libs/foo.jar', 'libs/bar.jar')

التبعية الثنائية عن بعد Remote binary dependency


implementation 'com.example.android:app-magic:12.3'
 هذا هو اختصار فعليًا لما يلي:
implementation group: 'com.example.android', name: 'app-magic', version: '12.3'
 يوضح هذا اعتمادًا على الإصدار 12.3 من مكتبة "app-magic" ، داخل مجموعة مساحة الاسم "com.example.android".

ملاحظة: تتطلب مثل هذه الاعتمادات عن بعد أن تعلن مستودعات التخزين عن بعد المناسبة حيث يجب أن يبحث Gradle عن المكتبة. إذا لم تكن المكتبة موجودة بالفعل محليًا ، فإن Gradle تسحبها من الموقع البعيد عندما يتطلب البناء ذلك (مثل عند النقر فوق Sync Project مع Gradle Files أو عند تشغيل البنية).

تكوينات الاعتمادية Dependency configurations


داخل كتلة التبعيات ، يمكنك إعلان تبعية المكتبة باستخدام أحد تهيئات التبعية المختلفة (مثل التنفيذ الموضح أعلاه). يوفر كل تبع تبعية Gradle إرشادات مختلفة حول كيفية استخدام التبعية. يصف الجدول التالي كل التهيئات التي يمكنك استخدامها للتبعية في مشروع Android الخاص بك. يقارن الجدول أيضًا هذه التهيئات مع تلك التي تم إيقافها اعتبارًا من Android Gradle Plugin 3.0.0.


التكوين الجديد التكوين مهمل سلوك
implementation compile
يضيف Gradle التبعية إلى classpath للترجمة ويقوم بتعبئة التبعية إلى مخرجات الإنشاء. ومع ذلك ، عندما تقوم الوحدة النمطية الخاصة بك بتكوين تبعية تنفيذ ، فإنها تدع Gradle تعرف أنك لا تريد أن تسر الوحدة النمطية التبعية إلى وحدات أخرى في وقت التحويل البرمجي. وهذا هو ، التبعية متاحة للوحدات الأخرى فقط في وقت التشغيل.

يمكن أن يؤدي استخدام تكوين التبعية هذا بدلاً من api أو compile (deprecated) إلى تحسينات كبيرة في وقت الإنشاء نظرًا لأنه يقلل عدد الوحدات النمطية التي يحتاجها نظام الإنشاء لإعادة التجميع. على سبيل المثال ، إذا غيّر تبعية التطبيق API الخاص به ، فإن Gradle يعيد ترجمة ذلك التبعية والوحدات التي تعتمد عليها مباشرة. يجب أن تستخدم معظم وحدات الاختبار والاختبار هذا التكوين.
api. compile يضيف Gradle التبعية إلى classpath للإنشاء وإنشاء الإخراج. عندما تتضمن الوحدة النمطية اعتمادًا على واجهة برمجة التطبيقات ، فسيسمح لك Gradle بمعرفة أن الوحدة تريد تصدير تلك التبعية بشكل عمودي إلى وحدات أخرى ، بحيث تكون متاحة لها في وقت التشغيل والوقت التجميعي.

يتصرف هذا التكوين تمامًا مثل الترجمة (التي تم إهمالها الآن) ، ولكن يجب عليك استخدامها بحذر وفقط مع التبعيات التي تحتاج إلى تصديرها بشكل انتقائي إلى المستهلكين الآخرين. ويرجع ذلك إلى أنه في حالة تغيير التبعية api لواجهة برمجة التطبيقات الخارجية ، فإن Gradle يعيد تجميع كل الوحدات التي يمكنها الوصول إلى تلك التبعية في وقت التحويل البرمجي. لذا ، فإن وجود عدد كبير من التبعيات api يمكن أن يزيد بشكل كبير من وقت البناء. ما لم تكن ترغب في كشف واجهة برمجة التطبيقات للتبعية إلى وحدة نمطية منفصلة ، يجب أن تستخدم وحدات المكتبة بدلاً من ذلك تبعيات التنفيذ
compileOnly provided يضيف Gradle التبعية إلى classpath الخاص بالتجميع فقط (أي ، لا يتم إضافته إلى مخرجات الإنشاء). يكون ذلك مفيدًا عند إنشاء وحدة Android وتحتاج إلى الاعتماد أثناء التحويل البرمجي ، ولكن من الاختياري أن تكون موجودة في وقت التشغيل.

إذا كنت تستخدم هذا التكوين ، فيجب أن تتضمن وحدة المكتبة الخاصة بك شرطًا للوقت للتحقق مما إذا كانت التبعية متوفرة ، ومن ثم تغيير سلوكها بأمان حتى تظل تعمل إذا لم يتم توفيرها. يساعد ذلك في تقليل حجم ملف APK النهائي عن طريق عدم إضافة تبعيات مؤقتة غير حرجة. يعمل هذا التكوين مثلما يتم توفيره (والذي تم إيقافه الآن).
runtimeOnly apk يضيف Gradle التبعية إلى مخرجات الإنشاء فقط ، لاستخدامها أثناء وقت التشغيل. بمعنى ، لا يضاف إلى classpath الترجمة. هذا التكوين يتصرف تماما مثل APK (الذي هو الآن إهمال).
annotationProcessor compile لإضافة تبعية على مكتبة بمعالج توضيحي ، يجب عليك إضافتها إلى مسار معالج التعليقات التوضيحية باستخدام التوصيف التوضيحي المعالج. ويرجع ذلك إلى أن استخدام هذا التكوين يعمل على تحسين أداء الإنشاء من خلال فصل تصنيف فئة الترجمة من مسار فئة المعالج التوضيحي. إذا عثر Gradle على معالجات توضيحية على مسار التصنيف التجميعي ، فإنه يلغي تنشيط التجميع ، والذي يؤثر سلبًا على وقت الإنشاء (Gradle 5.0 أو أعلى يتجاهل معالجات التعليقات التوضيحية الموجودة على مسار التصنيف التجميعي).

فترض Android Gradle Plugin أن التبعية هي معالج توضيحي إذا كان ملف JAR يحتوي على الملف التالي:
META-INF / services / javax.annotation.processing.Processor. إذا اكتشف المكون الإضافي معالجًا توضيحيًا موجودًا في مسار التصنيف التجميعي ، فإنه ينتج عنه خطأ في الإنشاء.

تنطبق التكوينات المذكورة أعلاه على مجموعة المصدر الرئيسي لمشروعك ، والتي يتم تطبيقها على جميع أشكال الإنشاء. إذا كنت ترغب بدلاً من ذلك في إعلان تبعية لمجموعة معينة فقط من مصادر مختلفة للبناء ، أو لمجموعة مصدر اختبار ، يجب أن تقوم بتكبير اسم التوصيف وبادئته باسم متغير الإنشاء أو مجموعة مصدر الاختبار.

على سبيل المثال ، لإضافة تبعية تطبيق فقط إلى نكهة المنتج "المجاني" (باستخدام تبعية ثنائية عن بعد) ، يبدو كالتالي:

dependencies {
freeImplementation 'com.google.firebase:firebase-ads:9.8.0'
}
ومع ذلك ، إذا كنت ترغب في إضافة تبعية لمجموعة متنوعة تجمع بين نكهة المنتج ونوع البناء ، فيجب عليك تهيئة اسم التكوين في كتلة التكوينات. يضيف النموذج التالي إلى وقت التشغيل إلى تبعية الإنشاء "freeDebug" (باستخدام تبعية ثنائية محلية):

configurations {
// Initializes a placeholder for the freeDebugRuntimeOnly dependency
// configuration.
freeDebugRuntimeOnly {}
}
dependencies {
freeDebugRuntimeOnly fileTree(dir: 'libs', include: ['*.jar'])
}

لإضافة تبعيات التنفيذ للاختبارات المحلية والاختبارات الآلية ، يبدو الأمر كما يلي:

dependencies {
    // Adds a remote binary dependency only for local tests.    testImplementation 'junit:junit:4.12'
    // Adds a remote binary dependency only for the instrumented test APK.    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

ومع ذلك ، بعض التكوينات لا معنى في هذا الموقف. على سبيل المثال ، نظرًا لأن الوحدات النمطية الأخرى لا تعتمد على androidTest ، يمكنك الحصول على التحذير التالي إذا كنت تستخدم تكوين androidTestApi:

تحذير: التكوين "androidTestApi" غير صالح وقد تم استبداله "androidTestImplementation.

إضافة معالجات التوضيحية annotation processors


إذا أضفت معالجات توضيحية إلى مسار التصنيف الخاص بك ، سترى رسالة خطأ مشابهة لما يلي:
خطأ: يجب أن يتم الإعلان بوضوح عن معالجات التعليقات التوضيحية الآن.
لحل هذا الخطأ ، قم بإضافة المعالجات التوضيحية إلى المشروع الخاص بك عن طريق تكوين التبعية الخاصة بك باستخدام annotationProcessor كما هو موضح أدناه:

dependencies {
    // Adds libraries defining annotations to only the compile classpath.    compileOnly 'com.google.dagger:dagger:version-number'
    // Adds the annotation processor dependency to the annotation processor classpath.    annotationProcessor 'com.google.dagger:dagger-compiler:version-number'
}
تمرير الوسائط إلى معالجات التعليقات التوضيحية Pass arguments to annotation processors

إذا كنت بحاجة إلى تمرير الوسائط إلى معالج التعليقات التوضيحية ، فيمكنك القيام بذلك باستخدام كتلة AnnotationProcessorOptions في تكوين البنية الخاص بالوحدة النمطية. على سبيل المثال ، إذا كنت ترغب في تمرير أنواع البيانات الأولية كأزواج قيمة رئيسية ، فيمكنك استخدام خاصية الوسيطة ، كما هو موضح أدناه:

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                argument "key1", "value1"
                argument "key2", "value2"
            }
        }
    }
}
ومع ذلك ، عند استخدام برنامج Android Gradle plugin 3.2.0 والإصدارات الأحدث ، تحتاج إلى تمرير وسيطات المعالج التي تمثل الملفات أو الأدلة باستخدام واجهة Gradle's CommandLineArgumentProvider.

يتيح لك استخدام CommandLineArgumentProvider أو مؤلف معالج التعليق التوضيحي تحسين أداء وأداء التركيبات المتزايدة والتدريجية المخزنة مؤقتًا من خلال تطبيق التعليقات التوضيحية الخاصة بنوع البناء التزايدي على كل وسيطة.

على سبيل المثال ، تطبق الفئة أدناه CommandLineArgumentProvider ويوضّح كل وسيطة للمعالج. يستخدم النموذج أيضًا بنية لغة Groovy ويتم تضمينه مباشرة في ملف build.gradle الخاص بالوحدة النمطية.

ملاحظة: عادةً ، يقدم مؤلفو المعالجات التوضيحية إما هذه الفئة أو إرشادات حول كيفية كتابة مثل هذه الفئة. ويرجع ذلك إلى أن كل وسيطة تحتاج إلى تحديد التعليق التوضيحي لنوع موقع البناء الصحيح للعمل على النحو المنشود.

دورة ريسكين حل مشكل رسالة خطأ Compile و Implementation على Android Studio



ليست هناك تعليقات:

إرسال تعليق

Please enable / Bitte aktiviere JavaScript!
Veuillez activer / Por favor activa el Javascript! [ ? ]

نموذج الاتصال

الاسم

بريد إلكتروني *

رسالة *