مكونات مشروع الأندرويد ستوديوا وأداة gradle

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

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

تفاصيل عن مكونات الاندرويد استوديوا android studio

يقسم الأندرويد استوديو أي برنامج اندرويد إلى خمسة أجزاء رئيسية تظهر تلك التركيبة للمشروع (تطبيق) في يسار اندرويد استديو.

أولا : مجلدات المصادر resorses بإختصار res أو R

يحتوي على مجلدات تحتوي على ملفات التصاميم للواجهات والسمات والصور والأيقونات وملفات الصوتية ، فهذه المجلدات تعبر عن المصادر أي الأشياء الذي يأخذ منه التطبيق شكله (تصاميم وسمات وعرض وارتفاع والوان) ومحتوياته من صور وملفات صوت وغيرها ... فهذا المجلد resorses أو res سهل التعلم يختص بالتصميم وغير مرتبطة في البرمجة بمعنى تعلمها بشكل مستقل وسريع.
مع مراعاة التجديد في التعليم أي البحث عن ماهو جديد ك تصميم الماتيريل ديزاين matrial design للتطبيقات ، فالتصاميم تتجدد فقد تحذف أشياء وتضاف أشياء لذلك لا تكتفي بقدر فهمك فكن متعطشا ومتابعا لك جديد ومبدعا فيه.

شرح مختصر للملفات في مجلد المصادر resorses أو res !

مجلد drawable :

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

مجلد Layout :

لربما فتحت أكثر من تطبيق على هاتفك ماذا لو حاولت أن تحلل إحداها ناخذ مثلا الواتس اب ك تطبيق معروف ومشهور ، هل فتحت الإعدادات Setting هنا تسمى واجهة Layout أو Activity وفتحت واجهة Activity أخرى ك الملف الشخصي profile وواجهة أخرى مثلا معلومات التطبيق App info . كل تلك عباره عن واجهات Layout او Activity وكل واجهة تحتوي على كم يا أزرار Buttons و نصوص Text موجود عليها وعند النقر على زر ينقلك إلى واجهة أخرى، فهذا المجلد Layout يحتوي على جميع الواجهات Activity التي سوف يحتويها تطبيقك وكل واجهة مصممة في ملف XML.
تعتبر XML أسهل طريقة للمبرمجين للتصميم تطبيقات الأندرويد بدلا من الجافا يمكن من تصميم واجهات Layout أو Activity وازرار button ووضع نصوص text صور image من الجافا نفسها لاكنها ستأخذ وقتك كله ولن تنجز بسرعة .

مجلد menu :

هل لاحظت الثلاث النقاط في أعلى الشاشة هذه تسمى القائمة لأغلب التطبيقات ، عند لمسه تعرض قائمة منسدلة يتم اختيار أي منها وعند فتح نافذه أخرى Activity في نفس التطبيق تختلف خيارات القائمة المنسدلة ! فجميعها يتم التحكم بها من هذا الملف.
ماهي عمل تلك القائمة menu ؟
لو أخذنا على سبيل المثال مستعرض ملفات الهاتف ونقرنا على القائمة menu تظهر خيارات منها انشاء مجلد Create Folder تختلف تلك الخيارات عند تحديد مجلد فتظهر حذف Delete و إعادة تسمية Rename ايظا مثال آخر عند كتابة موضوع جديد في مذكراه تظهر خيارات الحفظ save أو حفظ باسم save as أو خروج exit تراجع undo وهكذا .
وتختلف القائمة menu من حيث مكانها يمكن وضعها في أعلى اليمين أو الأسفل فكلها نفس العمل أو وضع قائمتنا مره واحدة .
مجلد mipmap : يعرض أيقونة التطبيق الرئيسية في شاشة الهاتف.
كيف تظهر الأيقونات كبيره الحجم عند فتح نفس التطبيق على جهاز لوحي كبير ؟

مجلد raw :

لوضع ملفات الصوتية داخله وتضاف يدويا بصيغة mp3 أو m4a .....وغيره حاول فك الضغط عن تطبيق الواتس اب > تحديد تطبيق الواتس اب (مستعرض الملفات ES إكسبلورر ) > ثم استخراج إلى extract to > فتح المجلد res > ثم مجلد raw > تجد بداخلها ملفات صوتية عند وصول اشعار الرسالة أو عند إرسال رسالة أو إجراء مكالمة وأيضا وارد المكالمات.

مجلد color :

الألوان هنا تختلف عن Color الألوان في مجلد Value فهذا الأخير يضع الألوان الثابتة بمعنى جميع الألوان التي في التطبيق يتم التحكم بها من ملف Color في مجلد Value اما Color في مجلد ال resorses أو res يعرض عند لمس زر Buttons أو نص text يتغير لونه .

مجلد anim :

يظهر التأثيرات مثلا عند التنقل من واجهة Activity إلى أخرى ك تكبير , تصغير ,تحريك 3d , التفاف ، مثل التنقل بين صفحات البرامج في شاشة الأندرويد.
مجلد Value يحتوي هذا المجلد على العديد من المصادر التي تظهر قيمة ك الأوان Color أو المساحات أو اللغات، وتعمل على تسهيل تصميم التطبيق.

ملف dimensions أو dimens.xml :

ويخزن القيم الابعاد لق هنا يمكنك من وضع قيمة مثلا ارتفاع النص text عن الزر button أو موقع الزر Buttons حيث يبعد عن يمين الشاشة مسافة كذا ...فهو خاص بالتصميم فيساعدك مثلا بوضع جميع النصوص text في التطبيق في حجم متساوي بدلا من تحديد حجم كل نص لحالة .

ملف String.xml :

يحتوي هذا المجلد على جميع النصوص texts التي في التطبيق حيث تم عمل هذا الأمر بشكل مستقل ليسهل ترجمتها من لغة إلى أخرى واذا أخذنا اللغة العربية على سبيل المثال في الأندرويد ستوديوا Android studio عند اختيار اللغة العربية كلغة مدعومة في التطبيق يتم تلقائيا تخزينها في مجلد Value-ar > ملف String.xml آخر خاص باللغة العربية وتحويل الكتابة من اليمين إلى اليسار على عكس البيئات الأخرى إكليبس Eclipse مثلا.
شرح تعريب البرامج ملف Strings.xml يوتيوب فرجة ممتعة. youtube.com/ZeroMod

ملف Styles.xml :

يحتوي على السمات الشكلية التي يظهر فيها التطبيق على الهاتف ك تصميم الماتيريل ديزاين matrial design أو تحديد سمات أو ثيم Them من اختيارك أو وضع قيمة واحدة لجميع الأزرار Buttons ك الألوان.
في السابق كان يتم وضع أيقونة التطبيق " التي تظهر على شاشة الهاتف " على مجلد ال drawable وحاليا يتم وضعها تلقائيا في مجلد mipmap لذلك قد لا تعتبر تلك الأشياء أساسية يمكن حذف او إضافة مع مرور الزمن ويمكنك من تغير أو ضع أسماء مجلدات من نفسك لاكن تلك تقاليد برمجه متعارف عليها.

ثانيا : الجافا java

لغة برمجة الجافا عند تصميم الواجهات Layout يحتاج المستخدم (الزبون، العميل) إلى التفاعل معها Active فهو لايريد رؤية واجهات Layout وتصميمات Style وازرار button وخيارات check box غير قادر على التفاعل معها وعند ما يتفاعل المستخدم مع الواجهة Layout في XML عند اذا تسمى Activity في الجافا java وبشكل عام واجهة المستخدم User interface في الأندرويد android.
وهناك نوعان من التفاعل بين الواجهات Activity بحيث النوع الأول يتفاعل المستخدم مع نفس الواجهة Activity عن طريق الأزرار Buttons كمثال تطبيقات تعديل الصور حيث هناك أزرار Buttons لقص الصورة وتغيير حجمها والألوان وتحويلها إلى لوحة مرسومة مثلا بينما النوع الثاني التفاعل مع الواجهات Activity مع بعضها البعض بحيث تدخل بيانات في الواجهة Activity الأولى فتظهر في واجهة Activity أخرى أو عدة واجهات Activity كمثال عند التنقل بين الصفحات (لسان) في المتصفحات browsers أو المجلدات folder في مستعرض الملفات My Folder . أو التنقل بين واجهة Activity وأخرى .
برمجة الأندرويد أو جافا الأندرويد java for android لا تختلف شكلا عن برمجة الجافا فهي مبنية عليه أي جميع انواع المتغيرات والكلمات الثابتة في لغة البرمجة جافا وطرق كتابة الأوامر ( الأكواد ) هي نفسها في جافا الأندرويد ، لذلك تعلم الجافا أو جافا أندرويد جميعها تفيدك. غير أن جافا الأندرويد المتغيرات والكلمات الدلالية قد تحذف أو تظاف أشياء جديدة مع كل تحديث لنظام للأندرويد.
في السابق كان هناك نوع من الواجهات Activity في أندرويد الجافا اسمها ActionBarActivity حاليا لم تعد تعمل أي تم أهلكها والإستغناء عنها وتم إستبدالها بواجهة جديدة New Activity تدعم التصميمات والمميزات الحديثة AppCompatActivity وخلف كل من هذه الواجهات Activity مئات الآلاف من الأوامر و الأكواد وعند إستبعادها لن تعمل تلك الأوامر لذلك لابد من تتبع كل ماهو جديد في جافا الأندرويد java for android.
بإمكانك إضافة أكواد و أوامر code وواجهات تتفاعل مع المستخدم Activity بنفسك وتغيرها أسمائها جذريا وتبني فيها كم من أوامر code ماشئت لكن تلك طريق طويله جدا فتحتاج إلى فريق ك مطوري جوجل Google Developer فهم من يضعون ويضيفون الألف بل وملايين من الأوامر والاكواد التي تسهل علينا البرمجة لجافا الأندرويد java for android وكل ماعلينا البحث ومعرفة تلك التركيبة للأوامر codes وكيف تعمل وكيف نتعامل معها؟
في الدروس القادمة سوف نفصل برمجة جافا عن التصميم رغم أنها أصبحت مرتبطة كثيرا في التحديثات الجديده من نظام الأندرويد .

ثالثا : اداة build.gradle

عندما تقوم ببناء مشروع جديد New project فإنه من المحتمل أن تقوم بتضمينه مكتبات jar خارجية مساعدة كحال معظم المشاريع المكتوبة بلغة جافا،
ولنفترض أنك تريد نقل مشروعك لجهاز أخر فمن المرجح أنك ستواجه بعض الأخطاء البرمجية في حال لم تكن تلك المكتبات المستخدمة موجودة على الجهاز الجديد.
وعندها تقوم بالبحث عن اسماء المكتبات المستخدمة في المشروع في الحاسب الأول، لتضمنها في مشروعك على الحاسب الثاني (موبايل أندرويد طراز قديم ) لمعالجة الأخطاء وعمل كومبايل compile (ضغط) له لبناء المشروع.
هذه العملية تم توفير أدوات لها وتعرف بأدوات بناء المشروع build tools والتي أشهرها ant و maven و أحدث تلك الأدوات gradle
وإذا تكلمنا عن جرادل gradle تحديدا فإنه لم يعد المبرمج يحتاج لتذكر ما هي المكتبات المرتبطة بمشروعه، بل يكفي أن يقوم بكتابة اسم المكتبة المطلوبة في ملف جرادل gradle داخل المشروع كملف build.gradle في الأندرويد
وعندما يقوم المبرمج بنقل المشروع لجهاز أخر فإن ملف جرادل gradle تنفيذه من قبل أداة اسمها جرادل gradle يقوم بالبحث عن المكتبة بشكل تلقائي، فإذا لم يجدها فإنه يحاول البحث عنها في الإنترنت وتحميلها وتضمينها في المشروع بشكل آلي.
تعد جرادل gradle tool أداة لبناء المشاريع، وليست مرتبطة ببرمجة اندرويد لكن اشتهرت بعد أن تم اعتمادها في برنامج اندرويد ستديو Android studio لبناء تطبيقات اندرويد،
بالعودة لأندرويد ستديو Android studio ، لنفترض أنك تريد اضافة مكتبة library داخل لمشروعك للتعامل فرضا مع عنصر FAB ووضع المكتبة في مجلد libs فإنه يمكن اضافة المكتبة إلى مشروعك وإضافته إلى ملف جرادل gradle بأمر بالصيغة التالية:
dependencies { compile 'com.shamanland:fab:0.0.8' }
عنصر FAB معنى FloatingActionButton أي الزر Buttons الذي يأتي لأغلب تطبيقات الأندرويد الحديثة بشكل (+) ويظهر اسفل يمين التطبيق لاكن هذا الزر FAB يدعم API level 21 أندرويد 5.0 وما فوق لولي بوب Lollipop لذلك يتم اضافة المكتبة السابقة في مجلد المكتبات libs أو أداة جرادل gradle تقوم بالبحث عنها بشكل تلقائي وتضمينها في مشروع التطبيق بحيث سيدعم أجهزة الأندرويد القديمة API level 7 اندرويد 2.1

هذا المثال في الرابط التالي.
How can I add the new "Floating Action Button" between two widgets/layouts - Stack Overflow
stackoverflow.com/floating-action
لمعرفة ماهو API level راجع المقال السابق الرابط الآتي . zero-dev.com/api-level
مثال أخر: يستطيع اندرويد ستديو باستخدام جرادل بناء تطبيق أندرويد موجه للهواتف والساعات والتلفزيون بنفس الوقت مع بعض التعديلات، ولو افترضنا أنك تبني تطبيق للهواتف والساعات والتلفزيون وفي جميع تلك النسخ تستخدم ملف HelloWorld.java متطابق فما الحاجة من تكراره ثلاث مرات في ثلاثة مشاريع متشابهة، هنا يأتي دور جرادل أثناء بناء نسخ التطبيق ليقول للنظام خذ الملفات مشتركة والخاصة بالهاتف لبناء تطبيق هاتف، وخذ الملفات المشتركة والخاصة بالتلفزيون لبناء تطبيق تلفزيون, .... وهكذا.
وسبب بطء أول تشغيل لأندرويد ستديو Android studio هو تنزيل المكتبات التي قد يحتاجها لبناء تطبيق ما، ووضع المكتبات على حاسبك.وهذا ما يميز الأندرويد ستوديوا عن بقية البيئات الأخرى.
يمكن القراءة للتعلم أكثر عن جرادل gradle وإمكانياته من الرابط التالي
docs.gradle.org
كلمة أخيرة: من الضروري معرفة التعامل مع جرادل، لكن ذلك لا يعني دعوة لإتقانه، لأن الشخص الذي يريد برمجة أندرويد سيجد نفسه أنه بالإضافة إلى برمجة أندرويد بالجافا يحتاج لتعلم جرادل والذي هو بدوره يحتاج لتعلم لغة جروفي, هذا سيؤدي لسلسلة طويلة من التعلم لذلك من وجهة نظري فإن تعلم أساسيات جرادل لعمل تطبيق اندرويد يكفي، وباقي الأمور يمكن تعلمها عند الحاجة.

رابعا : Manifest.xml "

يعتبر ملف Manifest.xml ك خارطة للتطبيق على سبيل المثال لو نظرنا إلى خارطة منطقة ما وجدنا هناك مستشفى و شارع رئيسي ومدرسة و 8 منازل وهنا مسجد كهذه الخريطة يمثل Manifest.xml عن عدد الواجهات Activity الموجودة في التطبيق وماهي الواجهة الرئيسية MainActivity أي التي يفتح التطبيق عليها مثال الواتس اب هل فتحت التطبيق من قبل وفتح على واجهة الإعدادات Setting Activity ؟!!! وصلاحيات ( أذونات ) permissions التطبيق بحيث يستطيع الوصل إلى الكاميرا ك تطبيقات معالجة الصور أو الوصول إلى الإنترنت ك تطبيقات الفيسبوك والمتصفحات ايظا الوصول إلى أرقام الهواتف ك الواتس اب والتلجرام
في تحديث Android 6.0 مارشميلوا Marshmallow يدعم إدارة صلاحية التطبيقات Application permission manage بحيث يمكنك من إيقاف أي تطبيق للوصول إلى الكاميرا مثلا لكل التطبيقات التي لها إذن الوصول إلى قمرا عدا كاميرا الهاتف وذلك لمنع التجسس في حال كون الهاتف مخترق.

خامسا : ملفات ومجلدات أخرى . other files and folders :

مجلد libs أي library بمعنى مكتبات الدعم .

سبق وشرحنا أن مكتبة الدعم support library مرتبطة ب أداة gradle لاكن يمكنك من وضع مكتبات libs في هذا المجلد يدويا و إستدعائها لاحقا.

مجلد assets :

يحتوي هذا المجلد على صفحات الإنترنت Website بصيغة html أو الخطوط Font ك تطبيقات الاوفيس office ايظا قد يحتوي على قواعد البيانات Data Base وصور وملفات صوتية ومرئية (فيديوا). ويمكن الوصول إليها ومعالجتها يدويا من خلال الجافا java .
قد ياتي إصدار أندرويد يدعم مجلد Folder واحد لخطوط fonts هاتف الأندرويد مثل نظام ويندوز windows 10 يستطيع كلا من الاوفيس office والرسام والفوتوشوب photoshop الوصول لنفس الخطوط. على عكس الأندرويد الذي يدعم الخطوط Font لكل برنامج على حده مثل برنامج PicsArt يتم إضافة الخطوط يدويا وكذا viva لتحرير الفيديوا

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

التعليقات