طريقه إنشاء مكتبة تطبيق اندرويد

الإعلانات

إنشاء مكتبة اندرويد

 

طريقه إنشاء مكتبة تطبيق اندرويد

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

المصدر، ملفات المصادر، وملف إيضاح اندرويد.

مع ذلك، بدلاً من القيام بعملية التحويل البرمجي إلى ملف APK، و الذي يتم تشغيله على جهازٍ ما، تتم عملية تحويل مكتبة

اندرويد برمجياً إلى ملف أرشيف اندرويد (AAR) و الذي يمكنك إستخدامه كإعتماد لنموذج تطبيق اندرويد.

على عكس ملفات JAR، يمكن أن تحتوي ملفات AAR على المصادر وملف الإيضاح الخاص بأندرويد، مما يسمح لك بالتجميع في

المصادر المشتركة مثل: المخططات والأدراج بالإضافة إلى فئات و دوال جافا.

 

نموذج المكتبة مفيد في الحالات التالية:

  • عندما تُنشئ عدة تطبيقات تستخدم نفس المكونات، مثل: الأنشطة، الخدمات، أو مخططات واجهة المستخدم.
  • عندما تقوم بإنشاء تطبيق له عدة صيغ APK مختلفة، مثل: إصدار مجاني و إصدار مدفوع، فإنك تحتاج إلى نفس المكونات الأساسية في كليهما.

في كلتا الحالتين، ببساطة قم بنقل الملفات التي تريد إعادة إستخدامها، إلى نموذج المكتبة، ثم قم بإضافة المكتبة كإعتماد لكل

نموذج من نماذج التطبيق. هذه الصفحة تشرح لك طريقه القيام بالأمرين.

 

 

طريقه إنشاء نموذج مكتبة


لإنشاء نموذج مكتبة جديد في مشروعك، اتبع ما يلي:

1. انقر فوق File ملف > New جديد >  New Module نموذج جديد.

2. في نافذة إنشاء نموذج جديد Create New Module التي تظهر، انقر فوق مكتبة اندرويد Android Library ، ثم انقر فوق التالي Next.

هناك أيضاً خيار لإنشاء مكتبة جافا Java Library، والتي تقوم بإنشاء ملف JAR تقليدي. على الرغم من أن ملف JAR

مفيد للعديد من المشاريع – خاصةً عندما ترغب في مشاركة الكود مع منصات أخرى – إلا أنه لا يسمح لك بتضمين مصادر

اندرويد أو ملفات الإيضاح، والذي هو أمر مفيد جداً لإعادة إستخدام الكود في مشاريع اندرويد. لذلك يركز هذا المستند على إنشاء مكتبات اندرويد.

3. قم بتسمية المكتبة الخاصة بك، وحدد إصدار SDK الأدنى للكود في المكتبة، ثم انقر فوق إنهاء Finish.

بمجرد إكتمال مزامنة مشروع Gradle، سوف يظهر نموذج المكتبة في لوحة Project على اليسار. إذا لم تشاهد مجلد النموذج

الجديد، فتأكد من إختيار نافذة المعاينة Android.

 

طريقه تحويل نموذج التطبيق إلى نموذج مكتبة

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

  1. افتح ملف build.gradle على مستوى النموذج .
  2. احذف السطر الخاص بـ applicationId. يمكن لنموذج تطبيق اندرويد فقط تعيينه.
  3. في الجزء العلوي من الملف، يجب أن ترى ما يلي:
apply plugin: 'com.android.application'

قم بتغييره إلى ما يلي:

apply plugin: 'com.android.library'

4. احفظ الملف ثم انقر فوق File > Sync Project with Gradle Files.

هذا كل شيء. سوف تبقى بنية النموذج بأكملها كما هي، لكنها تعمل الآن كمكتبة تعمل بنظام اندرويد، وستقوم عملية البناء الآن بإنشاء ملف AAR بدلاً من ملف APK.

عندما ترغب في إنشاء ملف AAR، حدد نموذج المكتبة في نافذة Project ثم انقر فوق Build > Build APK.

 

طريقه إضافة مكتبتك كإعتماد


لإستخدام كود مكتبة اندرويد في نموذج تطبيق آخر، اتبع ما يلي:

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

      • أضف الملف AAR (أو JAR) الذي تم تجميعه برمجياً (يجب أن تكون المكتبة مبنية بالفعل):
        1. انقر فوق File > New > New Module.
        2. انقر فوق Import .JAR/.AAR Package ثم انقر فوق Next.
        3. أدخل موقع ملف AAR أو JAR المحوّل برمجياً، ثم انقر فوق Finish.
      • إستيراد نموذج المكتبة إلى مشروعك (يصبح مصدر المكتبة جزءاً من مشروعك):
        1. انقر فوق File > New > Import Module.
        2. أدخل موقع مجلد نموذج المكتبة ثم انقر فوق Finish.

يتم نسخ نموذج المكتبة إلى مشروعك، بحيث تتمكن من تحرير كود المكتبة بالفعل. إذا كنت ترغب في الإحتفاظ

بإصدار واحد من كود المكتبة، فربما لا يكون هذا ما تريده، و بدلاً من ذلك يجب عليك إضافة ملف الأرشيف AAR المحول برمجياً كما هو موضح أعلاه.

2. تأكد من أن المكتبة مدرجة في أعلى ملف settings.gradle الخاص بك، كما هو موضح هنا لمكتبة مسماة بـ “my-library-module”:

include ':app', ':my-library-module'

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

dependencies {
    implementation project(":my-library-module")
}

4. انقر فوق Sync Project with Gradle Files.

في هذا المثال أعلاه، يقوم تكوين التطبيق implementation بإضافة المكتبة المسماة my-library-module بإعتبارها إعتماد بناء لنموذج التطبيق بأكمله.

بدلاً من ذلك، إذا كنت تريد المكتبة لمتغير بناء معين فقط، فبدلاً من التنفيذ implementation، إستخدم buildVariantNameImplementation.

على سبيل المثال، إذا كنت تريد تضمين المكتبة فقط في الإصدار “المحترف\PRO”، فستبدو كما يلي:

productFlavors {
    pro { ... }
}
dependencies {
    proImplementation project(":my-library-module")
}

يمكن الآن الوصول إلى، أي أكواد و أي مصادر موجودة في مكتبة اندرويد من خلال نموذج التطبيق لديك، ويتم تجميع\حزم ملف AAR

الخاص بالمكتبة في ملف APK الخاص بك خلال وقت البناء.

ومع ذلك، إذا كنت ترغب في مشاركة ملف AAR الخاص بك بشكلٍ منفصل، يمكنك العثور عليه في

/project-name/module-name/build/outputs/aar ويمكنك إعادة إنشاؤه بالنقر فوق Build > Make Project.

ملاحظه: لمعرفة المزيد حول إدارة الإعتماد، اقرأ إستخدام إدارة الإعتماد المتغيرة.

 

طريقه إختيار المصادر لجعلها عامه


جميع المصادر في المكتبة تكون عامة بشكلٍ إفتراضي. لجعل كافة المصادر خاصة بشكلٍ ضمني، يجب عليك تعيين سمة واحدة محددة على الأقل كـ “عامة/ public”.

تتضمن المصادر على جميع الملفات في مجلد /res الخاص بمشروعك، مثل الصور. لمنع مستخدمي مكتبتك من الوصول إلى المصادر المخصصة للإستخدام الداخلي فقط..

يجب عليك إستخدام آلية التعيين الخاصة التلقائية هذه، عن طريق إعلان واحد أو أكثر من المصادر العامة.

بدلاً من ذلك، يمكنك جعل جميع المصادر خاصة عن طريق إضافة الوسم </ public> فارغاً، والذي لا يمثل أي شيء عام، مما يجعل كل شيء آخر (كافة المصادر) خاصاً.

للإعلان عن مصدر عام، أضف الإعلان <public> إلى ملف public.xml الخاص بمكتبتك. إذا لم تقم بإضافة مصادر عامة من قبل،

فستحتاج إلى إنشاء ملف public.xml في مجلد /res/values الخاص بمكتبتك.

كود المثال التالي يقوم بإنشاء مصدري سلاسل عامه، بأسم mylib_app_name و mylib_public_string:

<resources>
    <public name="mylib_app_name" type="string"/>
    <public name="mylib_public_string" type="string"/>
</resources>

يجب أن تعلن عن أي مصادر (تجعلها عامه)، ترغب في أن تظل مرئية للمطورين الذين يستخدمون مكتبتك.

إن جعل السمات خاصة بصورة ضمنيه، لا يمنع مستخدمي مكتبتك فحسب من تجربة إقتراحات إكمال الأكواد، من مصادر المكتبة

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

إكمال الأكواد، ويحذرك Lint عند محاولتك الإشارة إلى مصدر خاص.

عند إنشاء مكتبة، مكون Android Gradle الإضافي يحصل على تعاريف المصادر العامة، ويستخرجها في ملف public.txt، والذي

يتم تجميعه packaged لاحقاً بداخل ملف AAR.

 

إعتبارات التطوير الخاصة بنماذج المكتبة


أثناء تطويرك لنماذج المكتبة والتطبيقات المعتمدة عليها، كن على دراية بالسلوكيات والقيود التالية.

بمجرد إضافتك لمراجع إلى نماذج المكتبة، في نموذج تطبيق اندرويد، يمكنك تعيين أولويتها النسبية “relative priority”. خلال وقت

البناء، يتم دمج المكتبات مع التطبيق واحد تلو الآخر، بدءاً من أدنى أولوية إلى أعلى أولوية.

  • تعارض دمج المصادر

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

في حالة حدوث تعارضات بين مكتبات AAR المتعددة، يتم إستخدام المصدر من المكتبة المدرجة أولاً في قائمة الإعتمادات

(الموجودة في الجزء العلوي من كتلة dependencies الإعتمادات).

لتجنب تعارض المصادر لمعرّفات المصدر الشائعه\العامه، فكر في إستخدام بادئة أو نظام تسمية آخر متسق و فريد في

النموذج (أو فريد في جميع نماذج المشروع).

 

  • في البنى متعددة النماذج، يتم التعامل مع إعتمادات JAR كإعتمادات إنتقاليه

عند إضافتك لإعتماد JAR إلى مشروع مكتبة والمُنتج عنه AAR، تتم معالجة JAR بواسطة نموذج المكتبة ويتم تجميعه مع AAR الخاص بها.

مع ذلك، إذا كان مشروعك يحتوي على نموذج مكتبة يُستهلك بواسطة نموذج التطبيق، فإن نموذج التطبيق يتعامل مع إعتماد JAR المحلي للمكتبة كإعتماد إنتقالي.

في هذه الحالة، تتم معالجة JAR المحلي بواسطة نموذج التطبيق الذي يستهلكه، وليس بواسطة نموذج المكتبة. وهذا لتسريع عمليات البناء الإضافية التي تنتج عن التغييرات في كود المكتبة.

يجب حل أي تعارضات في مصادر جافا التي تحدث بسبب إعتمادات JAR المحلية في نموذج التطبيق الذي يستخدم المكتبة.

 

  • يمكن أن يعتمد نموذج المكتبة على مكتبة JAR خارجية

يمكنك تطوير نموذج مكتبة يعتمد على مكتبة خارجية. (مثال، مكتبة الخرائط الخارجية). في هذه الحالة، يجب على التطبيق

التابع، البناء على هدف يتضمن المكتبة الخارجية (مثال، الوظائف الإضافية لـ Google APIs).

لاحظ أيضاً أن كلاً من نموذج المكتبة ونموذج التطبيق التابع، يجب أن يعلنا عن المكتبة الخارجية في ملفات الإيضاح الخاصة بهما، في عنصر <uses-library>.

 

  • يجب أن يكون minSdkVersion في وحدة التطبيق مساوي أو أكبر من الإصدار المحدد بواسطة المكتبة

يتم تجميع المكتبة كجزء من نموذج التطبيق التابع، لذلك يجب أن تكون واجهات برمجة التطبيقات المستخدمة في نموذج المكتبة، متوافقة مع إصدار النظام الأساسي الذي يدعمه نموذج التطبيق.

  • يقوم كل نموذج مكتبة بإنشاء فئة R الخاصة به

عندما تقوم بإنشاء نماذج التطبيق المعتمده على المكتبة، يتم تجميع نماذج المكتبة في ملف AAR ثم تتم إضافتها إلى نموذج التطبيق.

لذلك، تحتوي كل مكتبة على فئة R خاصة بها، والتي تم تسميتها وفقاً لأسم حزمة المكتبة. يتم إنشاء فئة R التي تم

إنشاؤها من النموذج الرئيسي، ونموذج المكتبة في جميع الحزم المطلوبة، بما في ذلك حزمة النموذج الرئيسية وحزم المكتبات.

  • قد يتضمن نموذج المكتبة على ملف تكوين ProGuard الخاص به

إذا كان لديك مشروع مكتبة تستخدمه لإنشاء AAR ونشره، فيمكنك إضافة ملف تكوين ProGuard إلى تكوين البناء الخاص

بمكتبتك وسيقوم المكون الإضافي Android Gradle بتطبيق قواعد ProGuard التي حددتها.

تقوم أدوات البناء بتضمين هذا الملف بداخل ملف AAR الذي تم إنشاؤه لنموذج المكتبة. عند إضافة المكتبة إلى نموذج

التطبيق، يتم إلحاق ملف ProGuard الخاص بالمكتبة بملف تكوين ProGuard التالي (proguard.txt) من نموذج التطبيق.

 

من خلال تضمين ملف ProGuard في نموذج المكتبة الخاص بك، فإنك تضمن أن نماذج التطبيق التي تعتمد على مكتبتك

ليست بحاجة إلى تحديث ملفات ProGuard الخاصة بها يدوياً، لكي تستخدم مكتبتك.

عندما يقوم نظام البناء الخاص بأندرويد ستوديو بإنشاء تطبيقك، فإنه يستخدم التعليمات من كلٍ من نموذجي التطبيق

والمكتبة.

لذلك، ليست هناك حاجة لتشغيل أداة تقليص الكود code shrinker في المكتبة في خطوة منفصلة.

لإضافة قواعد ProGuard إلى مشروع مكتبتك، يجب عليك تحديد اسم الملف بإستخدام الخاصية consumerProguardFiles،

بداخل كتلة defaultConfig من ملف build.gradle في مكتبتك.

مثال، يعين المقتطف التالي lib-proguard-rules.txt كملف تكوين ProGuard للمكتبة:

android {
    defaultConfig {
        consumerProguardFiles 'lib-proguard-rules.txt'
    }
    ...
}

مع ذلك، إذا كان نموذج المكتبة الخاصة بك، جزء من بنية متعددة النماذج، التي يتم تجميعها في ملف APK ولا تنشئ ملف

AAR، فيجب تشغيل عملية تقليص الكود، على نموذج التطبيق الذي يستهلك المكتبة فقط. لمعرفة المزيد حول قواعد

ProGuard و إستخداماتها، اقرأ تقليص، تعتيم، وتحسين التطبيق.

 

  • إختبار نموذج المكتبة هو نفسه إختبار التطبيق

الفرق الرئيسي هو أن المكتبة و إعتماداتها يتم تضمينها تلقائياً كإعتمادات لإختبار APK. وهذا يعني أن إختبار APK لا يشتمل

فقط على الكود الخاص به، ولكن يشمل أيضاً على AAR الخاص بالمكتبة وكافة إعتماداتها. نظراً لعدم وجود “تطبيق قيد

الإختبار” منفصل، تقوم مهمة androidTest بتثبيت (وإلغاء تثبيت) إختبار APK فقط.

عند دمج العديد من ملفات الإيضاح، يتبع Gradle نظام ترتيب الأولوية الإفتراضي، ويدمج ملف إيضاح المكتبة في ملف الإيضاح الرئيسي لإختبار APK.

 

التركيب البنائي لملف AAR


الإمتداد الخاص بملف AAR هو aar. ، ونوع Maven Artifact يجب أن يكون arr أيضاً. الملف نفسه هو ملف مضغوط zip يحتوي على الإدخالات الإجبارية التالية:

  • AndroidManifest.xml/
  • classes.jar/
  • /res/
  • R.txt/
  • public.txt/

بالإضافة إلى ذلك، قد يتضمن ملف AAR واحداً أو أكثر من الإدخالات الإختيارية التالية:

  • /assets/
  • libs/name.jar/
  • jni/abi_name/name.so/ (حيث أن abi_name يمثل إحدى واجهات التطبيق الثنائية ABI المدعومه لأندرويد).
  • proguard.txt/
  • lint.jar/
  • api.jar/

 


للإطلاع على المقال باللغة الإنجليزية أضغط هنا.

 

الإعلانات

اترك رد