يكتشف المكون الإضافي Dependency Analysis Gradle (DAGP، née Dependency Analysis Android Gradle Plugin) ما يلي:
التبعيات غير المستخدمة.
التبعيات المتعدية المستخدمة (والتي قد ترغب في الإعلان عنها مباشرة).
تم الإعلان عن التبعيات في التكوين الخاطئ ( api
vs implementation
vs compileOnly
، وما إلى ذلك).
كأثر جانبي، يمكن للمكون الإضافي أيضًا أن يخبرك بـ ABI الخاص بمشروعك، وينتج ملفات graphviz التي تمثل طرق عرض مختلفة للرسم البياني للتبعية، من بين أشياء أخرى. هذه الآثار الجانبية هي في الغالب سلوكيات داخلية غير موثقة، ولكنها قد تكون مثيرة للاهتمام لبعض المستخدمين المتقدمين.
بالإضافة إلى النصائح المتعلقة بالتبعية (انظر أعلاه)، توفر DAGP نصائح أخرى للمساعدة في الحفاظ على "بناء الصحة". ويشمل ذلك الكشف عن:
المكونات الإضافية غير الضرورية (حاليًا kapt
فقط).
المشاريع الفرعية ("الوحدات النمطية") التي تستخدم مكون Android الإضافي بشكل غير ضروري، ويمكن بدلاً من ذلك استخدام مكتبات JVM "العادية".
يرجى مراجعة الويكي للحصول على معلومات حول إصدارات Gradle، ومكون Android Gradle الإضافي، وما إلى ذلك، التي يتوافق معها هذا المكون الإضافي.
للحصول على تعليمات مفصلة، راجع ويكي.
أبسط طريقة هي إضافة ما يلي:
plugins {
id( " com.autonomousapps.build-health " ) version " <<latest_version>> "
}
مهم | إذا كان مشروعك يستخدم Kotlin أو Android (أو كليهما)، فيجب أيضًا تحميل تلك المكونات الإضافية في أداة تحميل فئة البرنامج النصي للإعدادات (أو أحد الوالدين). راجع الويكي لمزيد من المعلومات |
لبداية سريعة، فقط قم بتشغيل ما يلي:
./gradlew buildHealth
من المحتمل أن ترى الإخراج كما يلي:
> المهمة: فشل بناء الصحة الفشل: فشل البناء مع وجود استثناء. *ما حدث من خطأ: فشل التنفيذ للمهمة ':buildHealth'. > كانت هناك انتهاكات التبعية. راجع التقرير على file:///path/to/project/build/reports/dependency-analogy/build-health-report.txt
إذا كنت ترغب في طباعة هذا التقرير (من المحتمل أن يكون طويلًا جدًا) على وحدة التحكم، فأضف هذا إلى ملف gradle.properties
الخاص بك:
dependency.analysis.print.build.health=true
ليس عليك تطبيق هذا البرنامج المساعد على جميع المشاريع عبر البرنامج النصي للإعدادات. ويمكن أيضًا تطبيقه على مشاريع فرعية محددة فقط. في هذه الحالة، يجب أيضًا تطبيقه على البرنامج النصي لبناء الجذر.
plugins {
id( " com.autonomousapps.dependency-analysis " ) version " <<latest_version>> "
}
plugins {
id( " com.autonomousapps.dependency-analysis " )
}
مهم | إذا كان مشروعك يستخدم Kotlin أو Android (أو كليهما)، فيجب أيضًا تحميل تلك المكونات الإضافية في أداة تحميل فئة البرنامج النصي لبناء الجذر (أو أحد الوالدين). راجع الويكي لمزيد من المعلومات |
يمكن تشغيل التحليل على الوحدات الفردية باستخدام مهمة projectHealth
. على سبيل المثال:
./gradlew التطبيق:projectHealth
من الشائع أن يقوم المكون الإضافي بالإبلاغ عن العديد من المشكلات المتعلقة بإعلانات التبعية الخاصة بمشروعك. نظرًا لأن الإصلاح يدويًا قد يكون أمرًا شاقًا، يوفر المكون الإضافي أيضًا مهمة لإصلاح جميع المشكلات تلقائيًا.
./gradlewfixDependeency
يتم تسجيل مهمة fixDependencies
في كل مشروع يتم فيه تطبيق المكون الإضافي. سيؤدي تشغيله كما هو مذكور أعلاه إلى تشغيل المهمة في كل مشروع فرعي. راجع أيضًا إصلاح التبعيات بنقرة واحدة .
في بعض الحالات، قد يكون من غير الممكن حل كافة المشكلات في مسار واحد. ربما يكون لديك مشروع كبير جدًا، أو تقوم بنشر مكتبات وأنت تعلم أن تغيير إعلانات التبعية الخاصة بك سيؤدي أيضًا إلى تغيير البيانات التعريفية لمكتباتك، مما قد يؤدي إلى إحباط المستهلكين. لدعم حالة الاستخدام هذه، تأخذ مهمة fixDependencies
علامة اختيارية لإخبارها بإجراء التغييرات "الآمنة" فقط.
./gradlewfixDependeency --upgrade
مع وضع هذه العلامة في مكانها، لن تقوم مهمة fixDependencies
بإزالة أو "خفض مستوى" أي إعلانات تبعية. سوف يقوم فقط بإضافة أو "ترقية" الإعلانات (على سبيل المثال، من implementation
إلى api
).
في سيناريو الطرح المتزايد، يمكن للمرء أن يتخيل استخدام علامة --upgrade
، ثم تحديث جميع المستهلكين، ثم إزالة العلامة في النهاية وإزالة جميع التبعيات غير المستخدمة.
إذا كان التحليل يحتوي على أي أخطاء، فإن إصلاح إعلانات التبعية سيؤدي إلى كسر البنية الخاصة بك (ولكن هذا هو الحال أيضًا مع الإصلاحات اليدوية). إذا واجهت هذا، يرجى تقديم مشكلة.
بالإضافة إلى ذلك، تعتمد وظيفة إعادة الكتابة على قواعد Gradle Groovy/Kotlin DSL المبسطة، والتي ستفشل في حالة وجود نصوص بناء معقدة. نحن نخطط لتحسين القواعد النحوية لـ Gradle Kotlin DSL قريبًا، نظرًا لأنها لغة البرنامج النصي الافتراضية للبناء، ولكن ليس لدينا خطط حالية للقيام بنفس الشيء بالنسبة لـ Gradle Groovy DSL.
قد يكون لديك فضول لمعرفة سبب قيام المكون الإضافي بإصدار (أو عدم إصدار) نصيحة بخصوص بعض التبعيات. يمكنك أن تسأله لماذا:
./gradlew lib:reason --id com.squareup.okio:okio:2.2.2 (1) > المهمة :lib:السبب ---------------------------------------- لقد سألت عن التبعية "com.squareup.okio:okio:2.2.2". لا توجد نصيحة بخصوص هذه التبعية. ---------------------------------------- أقصر مسار من :lib إلى com.squareup.okio:okio:2.2.2: :lib --- com.squareup.okio:okio:2.2.2 المصدر: رئيسي ------------ * يعرض فئة okio.BufferedSource (يعني واجهة برمجة التطبيقات).
سلسلة الإصدار اختيارية.
للحصول على معلومات مفصلة حول كيفية تكوين البرنامج المساعد، راجع wiki.
لتكوين البرنامج المساعد، استخدم ملحق dependencyAnalysis
.
dependencyAnalysis {
// configuration goes here
}
فيما يلي قائمة بالمقالات/مشاركات المدونة التي تم نشرها لمناقشة هذا البرنامج الإضافي:
الرعاية والتغذية المناسبة لبناء Gradle الخاص بك
البرنامج المساعد لتحليل التبعيات: استخدام تحليل الرمز الثانوي للعثور على التبعيات غير المستخدمة
البرنامج الإضافي لتحليل التبعية: ما هو ABI؟
تقليل تأثير مكون Gradle الإضافي على وقت التكوين: رحلة
إصلاح التبعيات بنقرة واحدة
...مع المزيد في المستقبل :)
وقد ظهر هذا البرنامج المساعد أيضًا في هذه النشرات الإخبارية:
جرادل، أكتوبر 2024
جرادل، مايو 2022
جرادل، سبتمبر 2020
جرادل، أغسطس 2020
أندرويد ويكلي، العدد رقم 423
جرادل، يوليو 2020
جرادل، يونيو 2020
يمكن العثور على حلقات البودكاست حول هذا البرنامج المساعد هنا:
مخبز المطورين الحلقة رقم 31
مقاطع فيديو يوتيوب حول هذا البرنامج المساعد:
فهم Gradle #28 – تنظيف مسارات الفصل باستخدام البرنامج الإضافي لتحليل التبعية