كيف يتعامل الاندرويد مع المكتبات وماهو الـ maven & jcenter وطريقة رفع مكتبك الخاصة.

في الاندرويد ستديو اذا اردت ان تضمن مكتبة في مشروعك, كل ماعليك فعله هو اضافة بعض الأسطر البسيطة الى ملف build.gradle

انتهينا, الامر بسيط!!

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

من اين يقوم الاندرويد ستديو بجلب المكتبات؟

سأبدأ بهذا السؤال البسيط من اين يقوم الاندرويد ستديو بجلب المكتبات التي تُضمنها في مشروعك, هل يقوم البرنامج بالبحث عنها في قوقل ويقوم بتحميلها ؟ بالتأكيد لا والامر غير معقد بالشكل الذي تعتقده.

كل مافي الامر ان الاندرويد ستديو يقوم بتحميل جميع المكتبات من سيرفر Maven Repository والمعرف مسبقاً في ملف build.gradle و معظم المكتبات التي نستخدمها في مشاريعنا هي مستضافة على سيرفرين وهي المتعارف عليها jcenter & Maven Central .

jcenter

jcenter هو عبارة عن Maven Repository مستضاف من قبل bintray.com وتستطيع الاطلاع على جميع المكتبات المستضافة هنا عن طريق الرابط التالي:

http://jcenter.bintray.com
ولجلب المكتبات من jcenter كل ماعليك فعله هو تضمينه في ملف الـ build.gradle

Maven Central

Maven Central هي عبارة عن Maven Repository مستضافة من قبل sonatype.org وتستطيع الاطلاع على جميع المكتبات المستضافة هنا عن طريق الرابط التالي:

https://oss.sonatype.org/content/repositories/releases/
ولجلب المكتبات من الـ maven central كل ماعليك فعله هو تضمينه في ملف الـ build.gradle

ملاحظة: صحيح ان الـ jcenter و Maven Central هما المتعارف عليهم ومعظم المكتبات مستضافة هناك إلى أن كل واحد منهم مسؤول عنه جهة مختلفة عن الأخرى ولايوجد اي علاقة بينهم وقد تجد بعض المكتبات موجودة في واحد منهم دون الآخر.

معلومات إضافية حول Jcenter & Maven Central

في السابق كان الـ repo المعتمد في الاندرويد ستديو هو mavenCentral وهو الذي يتم تعريفه في ملف build.gradle بشكل افتراضي عند انشاء مشروع جديد ولك الخيار لاحقاً بتضمين الـ jcenter  ولكن بعد فترة من الزمن قررت قوقل تغير الـ repo الافتراضي إلى الـ jcenter وذلك لأسباب عديدة منها:

  1.  jcenter يعتبر أكبر repo موجود حتى الآن للجافا لذلك نادراً ما تجد مكتبة موجودة في maven ولا تجدها في jcenter هذا يعني أن معظم المكتبات التي قد تحتاجها هي موجودة في jcenter إلا في بعض الحالات التي سأوضحها لاحقاً.
  2. الـ jcenter يعتبر اسهل من maven في عملية رفع المكتبات عليه, ولايحتاج منك الى عمل sign على الاكواد.
  3. التحميل من الـ jcenter  يكون عن طريق CDN وهذا مايعطي سرعة أفضل في التحميل.

كيف يقوم الـ Gradle بتحميل بتحميل المكتبات؟

للأسباب السابقة ولأسباب عديدة قررت قوقل الانتقال الـ jcenter ولذلك سأركز في هذه المقالة على طريقة رفع مكتبتك الخاصة إلى الـ jcenter وبعد ذلك لديك الخيار برفعها إلى Maven Centralكيف يقوم الـ Gradle بتحميل بتحميل المكتبات؟

قبل ان نتكلم عن طريقة رفع مكتبك الخاصة إلى الـ jcenter سنوضح اولا كيف يقوم الـ gradle بقراءة وتحميل المكتبات التي تقوم بتضمينها في الملف, فعلى سبيل المثال اذا اردت تضمين مكتبة MediaPciker في مشروعك فستقوم باضافة السطر التالي:

لو تلاحظ ان السطر مقسم الى جزئين الاول compile والثاني يرمز إلى معلومات عن المكتبة وهذا السطر يتكون من اكثر من مقطع ويفصل بينها علامة : وتقرأ كالتالي:

في المثال السابق GROUP_ID هو net.alhazmy13.MediaPicker وهو المعرف الخاص بالمطور, ARTIFACT_ID هو اسم الـ module  الخاص بالمكتبة وفي حالتنا هذه فان اسم الـ module هو library مع التنبيه أن اسم الـ ARTIFACT_ID قد لا يطابق اسم الـ module ولكن المتعارف عليه انهما متطابقان, VERSION هو رقم الاصدار للمكتبة وفي مثالنا فان رقم الاصدار هو 2.2.5 .

ما الذي يحدث عندما نقوم بتضمين السطر السابق في مشروعنا؟

بكل بساطة سيتوجه الـ Gradle الى سيرفر الـ Maven Repository ويبحث عن المكتبة التي قمنا بتضمينها ويجلب رابط الملفات http://jcenter.bintray.com/net/alhazmy13/MediaPicker/libary/2.2.5/ وبعدها مباشرة سيقوم الاندرويد ستديو بتحميل الملفات ويضمنها من ضمن المشروع على شكل ملفات jar or aar .

ماهي ملفات jar و aar ؟

ملفات الـ jar كما نعرف جميعنا هي مثل الملف المضغوط يحتوي على كلاسات الجافا بينما ملفات الـ aar تختلف قليلاً, فـ جميع المكتبات التي نُعرفها ونستخدمها تحتوي على ملفات خاصة ببيئة الاندرويد, هذه الملفات قد تكون ملفات الـ xml الخاصة بالواجهات او النصوص او الالوان او حتى ملف الـ AndroidManifest.xml , وجميع الملفات السابقة لايمكن تضمينها في ملف الـ jar بل في ملف بامتداد aar.

ملف الـ aar يحتوي على جميع ملفات مكتبتك ومن ضمنها ستجد ملف الـ jar الخاص بأكواد الجافا classes.jar.

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

طريقة رفع مكتبك الى الـ jcenter

انشاء حساب على bintray

  1.  قبل كل شئ, قم بالتسجيل في موقع bintray.com (خطوات التسجيل جداً بسيطة)
  2.  بعد الانتهاء من التسجيل توجه الى الصفحة الرئيسة للموقع واختر maven
  3.   اضغط على زر Add new package
  4. قم بتعبئة الحقول التالية (اسم المكتبة, الوصف, رابط موقعك ورابط الـ repo الخاص بالمكتبة) مع ملاحظة انه لايوجد اي شروط لاختيار اسم الـ Pacakge ولكن يوجد بعض القواعد المتبعة من قبل المطورين وهي ان اسم الـ Package يجب ان يكون بحروف صغيرة والفاصل بين الكلمات هو رمز – (مثال my-library)
    عند الانتهاء اضغط على زر create Package
  5.  مباشرة الموقع سيقوم بتوجيهك الى صفحة الـ Package الذي قمت بإنشائه.
  6. انتهينا!! انت الان قمت بإنشاء Maven Repo على Bintray وأصبحت جاهزة لرفع مكتبك عليها.

رفع المكتبة على حسابك

إذا شاهدت مشروع اي مكتبة على الـ github ستلاحظ أن المشروع يحتوي على اكثر من module الأول عادةً يكون للمكتبة وقد تجد اسمه Library والآخر app or sample ويحتوي على مثال لطريقة استخدام المكتبة.

لذلك سنقوم بانشاء مشروع اندرويد جديد وسوف ننشئ module جديد للمكتبة و سأسميه library:

  1.  من قائمة file – new – new module
  2. اختر Android library
  3. في حقل Library Name ادخل Library وقم بتعديل حقل Package name الى النمط التالي (yourDomain.ibraryname.library)

الان المشروع يحتوي على two modules واحد لاكواد المكتبة وهو ما سوف يضمن المطورين في مشاريعهم والآخر قم بكتابة مثال لطريقة استخدام المكتبة .

بعد انتهائك من كتابة الاكواد سنقوم برفع المكتبة على الـ Repo الذي سبق و قمنا بانشاءه ولفعل ذلك يوجد العديد من الطرق ولكن أسهلها هو باستخدام مكتبة مساعدة اسمها bintray-release وإضافتها في مشروعك قم بأضافة الأسطر التالية إلى ملف الـ gradle الرئيسي للمشروع :

وقم بأضافة الأسطر التالية إلى ملف الـ gradle الخاص بـ library

مع تغير المتغيرات السابقة بما يناسب مكتبك وما يناسب الحساب الذي قمت بإنشائه سابقاً, فـ userOrg هو اسمك في bintray, groupId هو ماقمت بادخاله سابقا عند انشائك للـ Moduel الخاص بالمكتبة, artifactId اتركه مثل ماهو مالم تغير اسم الـ Module الخاص بالمكتبة, publishVersion هو اسم الـ repo الذي قمت بانشائها سابقاً على موقع bintray, desc و website هما وصف المكتبة ورابط موقعك واخيراً publishVersion هو إصدار المكتبة.

عند الانتهاء افتح الـ Terminal وأدخل الأمر التالي:

مع تغير BINTRAY_USERNAME باسم حسابك على bintray و BINTRAY_KEY رقمك الخاص على الموقع والذي تستطيع الحصول عليه من خلال صفحة حسابك في bintray

انتظر قليلاً وبعد لحظات ستشاهد في واجهة الـ Terminal العبارة التالية BUILD SUCCESSFUL وتعني أن عملية الـ Build انتهت بنجاح وان المكتبة تم رفعها على حسابك في bintray ولنتاكد قم بفتح حسابك في الموقع من جديد وتوجه الى الـ repo الذي سبق و قمنا بإنشائه.

كما هو واضح من الصورة السابقة أن المكتبة قد تم رفعها بنجاح وان رقم إصدار المكتبة هو 1.0.0 ولكن تبقت خطوة أخيرة وهي ربط الـ repo بالـ jcenter وذلك عبر الضغط على زر add to jcenter من الصفحة السابقة وقم بإضافة اي ملاحظات او اجعلها فارغة واضغط على زر send

انتهينا!! انتظر بضع ساعات و سيصلك ايميل لتنبيهك بأن عملية الربط قد انتهت وتستطيع نشرها إلى المطورين ليستفيدوا من المكتبة.

Share:
0 comments on كيف يتعامل الاندرويد مع المكتبات وماهو الـ maven & jcenter وطريقة رفع مكتبك الخاصة.

Post a comment

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *