في المشاريع التي تتضمّن العديد من الوحدات، قد يكون من الصعب توزيع مكتبات Android على المستخدمين مع محاولة الحفاظ على بنية مشروع واضحة. في كثير من الحالات، يجب نشر عدد أكبر من المكتبات عن المقصود.
يساعد المكوّن الإضافي "مكتبة مدمجة" المُضمّن في "المكوّن الإضافي لنظام Gradle المتوافق مع Android" في تجميع عدة وحدات من مكتبة Android في مكتبة Android واحدة قابلة للنشر. يتيح لك ذلك تقسيم رمز المصدر ومقاييس مكتبتك داخل الإصدار على النحو الذي تراه مناسبًا، مع تجنُّب الكشف عن بنية مشروعك بعد توزيعه.
يمكن أن تعود عليك مزايا التالية عند التوزيع كمكتبة واحدة:
- العناصر التابعة المبسّطة: يتم استبدال العناصر التابعة المتعددة للمكتبة بملف AAR واحد، ما يسهّل إعداد المشروع وإدارة الإصدارات للمستخدمين.
- تقليل حجم المكتبة: قد يؤدي ذلك إلى تحسين عملية تصغير الرموز البرمجية، ما يؤدي إلى تقليل وقت الاستجابة لطلبات البحث.
- أمان محسَّن: يمكن أن يوفّر تحكمًا أفضل في تفاصيل التنفيذ الداخلي للمكتبات المنشورة
إنشاء مكتبة مدمجة
لإنشاء مكتبة مدمجة، عليك إنشاء وحدة Android جديدة وإضافة التبعيات، ثم نشر المكتبة المدمجة.
إضافة وحدة مكتبة مدمجة جديدة
لاستخدام المكوّن الإضافي، عليك إضافة وحدة Android جديدة إلى مشروعك:
في هذا المثال، سيتم تسمية وحدة المكتبة المدمجة باسم myFusedLibrary
.
- فعِّل ميزة المكتبة المدمجة من خلال إضافة
android.experimental.fusedLibrarySupport=true
إلى ملفgradle.properties
. - إلحاق
include(":myFusedLibrary")
بملفsettings.gradle.kts
- أضِف
android-fusedlibrary = { id = "com.android.fused-library", version.ref = "agp" }
ضمن قسم[plugins]
في ملفgradle/libs.versions.toml
. - أضِف
alias(libs.plugins.android.fusedlibrary) apply false
في مقتطف plugins في ملفbuild.gradle.kts
في المستوى الأعلى. - لإنشاء وحدة
myFusedLibrary
، أنشئ دليلاً جديدًا باسمmyFusedLibrary
(انقر بزر الماوس الأيمن على "تطبيقي" > جديد > دليل). - أنشئ ملف
build.gradle.kts
في وحدةmyFusedLibrary
(انقر بزر الماوس الأيمن على وحدةmyFusedLibrary
> جديد > ملف). - الصِق ما يلي في ملف
myFusedLibrary/build.gradle.kts
:
Kotlin
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } androidFusedLibrary { namespace = "com.example.myFusedLibrary" minSdk = 21 } dependencies { }
رائع
plugins { id 'fused-library' } androidFusedLibrary { namespace 'com.example.myFusedLibrary' minSdk 21 } dependencies { }
إضافة التبعيات
تتمثل الوظيفة الأساسية للمكتبة المدمجة في تجميع المكوّنات التابعة. يتيح المكوّن الإضافي
إضافة مكتبات خارجية وتبعيات المشروع المحلية.
لتحديد التبعيات التي سيتم حزمها، استخدِم إعدادات include
.
لا يتم تجميع التبعيات الانتقالية.
مثلاً:
Kotlin
dependencies { include(project(":image-rendering")) include("mycoolfonts:font-wingdings:5.0") }
رائع
dependencies { include project(':image-rendering') include 'mycoolfonts:font-wingdings:5.0' }
نشر مكتبتك المدمجة
يجب الاطّلاع على نشر مكتبة Android قبل نشر مكتبة مدمجة. يشبه نشر مكتبة مدمجة نشر مكتبة Android، ولكن هناك بعض الاختلافات الأساسية التي يجب مراعاتها لنشر المكتبة المدمجة بشكل صحيح:
- يجب أيضًا تطبيق المكوّن الإضافي Maven Publish على أي وحدة تم تطبيق المكوّن الإضافي Fused Library عليها.
- يجب أن يكتسب النشر سمات من
fusedLibraryComponent
لأنّه يوفّر التبعيات المطلوبة لتجميع عنصر المكتبة المدمجة.
في ما يلي مثال على إعدادات النشر:
Kotlin
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } androidFusedLibrary { … } dependencies { … } publishing { publications { register<MavenPublication>("release") { groupId = "my-company" artifactId = "my-fused-library" version = "1.0" from(components["fusedLibraryComponent"]) } } }
رائع
plugins { id 'fused-library' id 'maven-publish' } androidFusedLibrary { … } dependencies { … } publishing { publications { release(MavenPublication) { groupId = "my-company" artifactId = "my-fused-library" version = "1.0" afterEvaluate { from components.fusedLibraryComponent } } }
نشر مكتبتك المدمجة للاختبار
يجب إجراء الاختبار استنادًا إلى مكتبة مدمجة منشورة من تطبيق Android أو مكتبة Android. الطريقة المقترَحة هي نشر المكتبة المدمجة وتبعيات المشروع في مستودع Maven محلي.
لنشر عناصر المكتبة المدمجة في مستودع محلي، حدِّد ملف تكوين مشابهًا لما يلي:
Kotlin
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } repositories { maven { name = "myLocalRepo" url = uri(layout.buildDirectory.dir("myLocalRepo")) } }
رائع
plugins { id 'fused-library' id 'maven-publish' } repositories { maven { name 'myLocalRepo' url layout.buildDirectory.dir('myLocalRepo') } }
تحميل مكتبتك المدمجة
لتوزيع مكتبتك المدمجة، اطّلِع على مقالة تحميل مكتبتك.
السلوك والإجراءات الوقائية
إنّ دمج مكتبات Android يتضمن تعقيدات يمكن أن تجعل من الصعب على الإضافة تحديد الأولويات. على سبيل المثال، ستؤدي مكتبتان تتضمّنان ملف Classpath نفسه إلى تعذُّر الإنشاء عند دمج المكتبة. سيراعي دمج الموارد ترتيب التبعيات المحدّدة عند اختيار مورد بالاسم نفسه في مكتبات مختلفة.
- لا يمكن نشر المكتبات المدمجة إلا كعنصر AAR لمكتبة Android من أجل إضافتها كعنصر يعتمد عليه التطبيق.
- لا يمكن دمج المكتبات التي تستخدم ربط البيانات.
- لا يمكنك دمج أنواع إصدارات وأنواع منتجات متعددة في مكتبة مدمجة واحدة. أنشئ مكتبات مدمجة منفصلة للصيغ المختلفة.
لتحقيق التوازن بين مقدار الإعدادات المطلوبة وسهولة الاستخدام، سيؤدي التكامل إلى إما إيقاف عملية الإنشاء بسبب تعارضات غير واضحة أو استخدام أساليب استقرائية عند دمج العناصر. يمكن العثور على تفاصيل كيفية دمج العناصر في الجدول التالي:
النوع | السُلوك |
---|---|
صفوف | ستؤدي المكتبات التي تحتوي على مسار فئة التحميل نفسه إلى تعذُّر الإنشاء عند دمج المكتبة. |
موارد لنظام التشغيل Android | سيراعي دمج الموارد ترتيب التبعيات المحدّدة عند اختيار مورد بالاسم نفسه في مصدر مختلف. |
البيانات الوصفية لملف AAR | يتم دمج إصدارات البيانات الوصفية لملف APK من خلال منح الأولوية للقيمة الأعلى من كل مكتبة تبعية. تتوفّر لغة وصفية بسيطة لإلغاء هذه القيم. KotlinandroidFusedLibrary { aarMetadata { minCompileSdk = 21 minCompileSdkExtension = 1 } } |
مراجع Java | لا يُسمح باستخدام ملفات موارد Java في مكتبات متعددة ذات مسارات متطابقة، وسيؤدي ذلك إلى تعذُّر عملية الإنشاء. |
المشاكل المعروفة
"المكتبة المدمجة" هي مكوّن إضافي جديد، وهناك مشاكل معروفة يتم العمل على حلّها لاستيفاء جميع حالات الاستخدام.
- عدم تضمين ملفات
lint.jar
في حزمة AAR المدمجة - إضافة ملفات تابعة لملف .aar آخر
- لا تتوفّر إمكانية دمج عناصر RenderScript وPrefab.
فهم العناصر التابعة للمكتبة المدمجة
لا تحتوي المكتبة المدمجة على أي مصادر، وتستخدم بفعالية مكتبات Android
باعتبارها المصدر الوحيد، لذا من المهم معرفة مصدر كل عنصر. لتضمين قائمة بالتبعيات التي تم دمجها في العنصر الناتج والتبعيات المطلوبة لإنشاء العنصر، يمكنك تنفيذ مهمة gradle :report
في المكتبة المدمجة. تنشئ المهام تقريرًا بتنسيق JSON يتم حفظه في الدليل
build/reports
للمكتبة المدمجة.
للحصول على معلومات إضافية حول التبعيات الداخلية للمكوّنات الإضافية، يمكنك تنفيذ مهمة
gradle :dependencies
لعرض حالة إعدادات المكوّنات الإضافية.