AndroidManifest.xml مكون محوري في كل تطبيق Android، إذ يعمل كملف تصريحي يحدد فيه المطورون جوانب مهمة من بنية التطبيق وسلوكه. ويُعدّ ملف XML هذا ضروريًا لتحديد الخصائص الأساسية للتطبيق، مثل مكوناته (الأنشطة والخدمات ومستقبلات البث وموفري المحتوى) والأذونات التي يحتاجها التطبيق ليعمل على النحو الصحيح. ويعمل AndroidManifest.xml كحلقة وصل بين التطبيق ونظام التشغيل Android، ما يضمن أن يفهم النظام كيف ينبغي دمج التطبيق وتفاعله مع موارد الجهاز والتطبيقات الأخرى.
وبتحديد عناصر مثل اتجاه الشاشة وأيقونة التطبيق وسمته، وميزات العتاد التي يستخدمها التطبيق، يتيح AndroidManifest.xml للمطورين تكييف تجربة المستخدم والتحكم في الأجهزة التي يُعرض عليها التطبيق. لذا فإن الملف ليس مجرد ضرورة تقنية، بل مكون استراتيجي يؤدي دورًا حاسمًا في ضمان استيفاء التطبيق للمتطلبات التقنية وتوقعات المستخدمين معًا في عالم الأجهزة المحمولة الدائم التطور.
AndroidManifest.xml ملف محوري في كل تطبيق Android يعمل كخريطة طريق لبنية التطبيق ووظائفه. ويحدد معلومات أساسية مثل مكونات التطبيق (الأنشطة والخدمات ومستقبلات البث وموفري المحتوى) والأذونات التي يحتاجها التطبيق ليعمل على النحو الصحيح. وإلى جانب تهيئة البناء، يحدد الملف أيضًا توافق التطبيق مع إصدارات Android وتهيئات الأجهزة المختلفة، ما يساعد على ضمان قدرة التطبيق على العمل بسلاسة عبر أجهزة مختلفة. وبتضمين البيانات الوصفية وتفاصيل التهيئة في AndroidManifest.xml، يستطيع المطورون التحكم في سلوك التطبيق وتفاعله مع النظام، ما يجعله جزءًا أساسيًا من عملية تطوير تطبيقات Android.
More about AndroidManifest.xml
AndroidManifest.xml ملف تهيئة أساسي في كل تطبيق Android، إذ يعمل كتصريح مركزي بالخصائص والمكونات الأساسية للتطبيق. ويُعدّ الملف حاسمًا لتمكين نظام Android من فهم كيف ينبغي أن يتصرف التطبيق، وما المكونات التي يتضمنها، وما الأذونات التي يحتاجها ليعمل على النحو الصحيح.
من الناحية التقنية، AndroidManifest.xml ملف XML يقع في المجلد src/main الخاص بوحدة التطبيق. ويحدد جوانب مهمة مثل المكونات التي يتألف منها التطبيق، كالأنشطة والخدمات ومستقبلات البث وموفري المحتوى. وفي المشاريع الحديثة، يُضبط معرّف الحزمة (applicationId) والإصدار في ملف بناء Gradle، وتدمج أدوات البناء هذه القيم وملفات البيان الخاصة بجميع المكتبات في ملف البيان النهائي. كما يحدد ملف البيان الأذونات التي يحتاجها التطبيق، كالوصول إلى الإنترنت أو كاميرا الجهاز؛ وبالنسبة إلى الأذونات الحساسة، يجب على التطبيق أيضًا أن يطلبها من المستخدم أثناء التشغيل، ما يضمن إطلاع المستخدم على الموارد التي سيستخدمها التطبيق.
يمكن أن يتضمن AndroidManifest.xml عدة أقسام مختلفة، يدعم كل منها وظائف مختلفة:
قسم التطبيق: هنا تُحدد الخصائص العامة للتطبيق، مثل السمة والأيقونات والأسماء. وهنا أيضًا يُصرَّح بالمكونات التي يتألف منها التطبيق، إلى جانب كيفية تشغيلها. ويُعدّ هذا القسم حاسمًا لضمان عرض التطبيق على النحو الصحيح وعمله كما هو متوقع.
قسم الأذونات: يحدد هذا الجزء من ملف البيان الأذونات التي يحتاجها التطبيق للوصول إلى الأجزاء المحمية من النظام أو بيانات المستخدم. ويمكن أن يتضمن أذونات لاستخدام اتصالات الشبكة أو قراءة جهات الاتصال أو الوصول إلى مساحة تخزين الجهاز. ويُعدّ التعامل الصحيح مع الأذونات حاسمًا للأمان وتجربة المستخدم معًا.
مرشحات النوايا: تُستخدم مرشحات النوايا لتحديد كيفية تفاعل مكونات التطبيق مع التطبيقات الأخرى والنظام. وهي تتيح للتطبيق الاستجابة لإجراءات أو بيانات محددة، مثل فتح صفحة ويب أو مشاركة ملف. وهذا يتيح دمج التطبيق بسلاسة مع الخدمات والوظائف الأخرى على الجهاز.
ومن أكبر نقاط قوة AndroidManifest.xml قدرته على تركيز المعلومات اللازمة لتشغيل تطبيق Android وتنظيمها. فبجمع هذه المعلومات في مكان واحد، يستطيع المطورون إدارة تهيئة التطبيق وتحديثها بسهولة، ما يقلل خطر الأخطاء وعدم الاتساق.
ويؤدي AndroidManifest.xml أيضًا دورًا مهمًا في أمان التطبيق. فباشتراط أذونات صريحة وتحديد حدود واضحة لما تكشفه مكونات التطبيق للتطبيقات الأخرى، كما في السمة android:exported مثلًا، يساعد ملف البيان على حماية بيانات المستخدم وسلامة الجهاز. وهذا مهم بشكل خاص في وقت يحظى فيه الأمان والخصوصية بالاهتمام.
عمليًا، يُعدّ AndroidManifest.xml جزءًا أساسيًا من كل عملية تطوير لتطبيقات Android. فهو يضمن تهيئة التطبيق على النحو الصحيح وجاهزيته للتفاعل مع المستخدم والنظام معًا بأمان وكفاءة. وسواء كان التطبيق بسيطًا أو حلًا معقدًا يضم مكونات كثيرة، فإن ملف AndroidManifest.xml جيد البنية هو مفتاح النجاح.
خلاصة القول، AndroidManifest.xml مكون حاسم في تطوير تطبيقات Android يجمع بين البنية والأمان والوظائف في ملف واحد. وتجعله قدرته على تحديد سلوك التطبيق والتحكم فيه أداة أساسية للمطورين الذين يريدون إنشاء تطبيقات متينة وآمنة لمنصة Android.
Frequently asked questions about AndroidManifest.xml
ما الغرض من ملف AndroidManifest.xml في تطبيق Android؟
يُعدّ ملف AndroidManifest.xml مكونًا أساسيًا في كل تطبيق Android، إذ يعمل كملف تهيئة محوري يحدد الخصائص والمكونات الأساسية للتطبيق. ومن بين أمور أخرى، يحدد اسم التطبيق وأيقوناته والأذونات التي يحتاجها ليعمل على النحو الصحيح، بينما يُضبط الإصدار عادة في بناء Gradle ويُضاف إلى ملف البيان النهائي. وعند تثبيت التطبيق، يقرأ نظام Android هذا الملف ليفهم كيف ينبغي دمج التطبيق في النظام وما الموارد التي يحتاجها.
وفضلًا عن ذلك، يتضمن ملف AndroidManifest.xml تصريحات بمكونات التطبيق، مثل الأنشطة والخدمات ومستقبلات البث وموفري المحتوى. وهذه التصريحات ضرورية لكي يسجل نظام Android الأجزاء المختلفة من التطبيق ويتعامل معها على النحو الصحيح. فمثلًا، يمكن للتطبيق نفسه تشغيل نشاط مُصرَّح به في ملف البيان، وإذا وُسم بأنه مُصدَّر، فيمكن أيضًا للتطبيقات الأخرى والنظام تشغيله، ما يتيح للتطبيق التفاعل مع التطبيقات الأخرى ووظائف النظام.
ومقارنة بملفات التهيئة الأخرى في تطبيق Android، يُعدّ AndroidManifest.xml فريدًا، لأنه لا يحدد بنية التطبيق وأذوناته فحسب، بل يتحكم أيضًا في طريقة تصرف التطبيق في سياقات وبيئات مختلفة. وهذا يجعل ملف البيان جزءًا حاسمًا من تطوير التطبيق وتوزيعه، إذ يساعد على ضمان عمل التطبيق على النحو الصحيح وبأمان عبر أجهزة وإصدارات Android المختلفة.
كيف تُحدد الأذونات في AndroidManifest.xml؟
يُصرَّح بالأذونات في AndroidManifest.xml بالعنصر uses-permission، الذي يوضع مباشرة داخل العنصر manifest وخارج العنصر application. ويسمّي كل عنصر إذنًا، مثل android.permission.INTERNET للوصول إلى الشبكة أو android.permission.CAMERA للكاميرا. ومن دون هذا التصريح، لا يستطيع التطبيق استخدام الوظيفة المحمية، بصرف النظر عما تحاول الشيفرة فعله. وهذا يشبه iOS، حيث تُوصف أسباب استخدام التطبيق للموارد المحمية في ملف Info.plist.
ويقسّم Android الأذونات إلى مستويات حماية. فالأذونات العادية، مثل الوصول إلى الإنترنت، تُمنح تلقائيًا عند تثبيت التطبيق. أما الأذونات الخطرة، مثل الكاميرا والموقع وجهات الاتصال والميكروفون، فيجب أيضًا طلبها من المستخدم أثناء التشغيل بدءًا من Android 6.0، ويجب على التطبيق التعامل مع رفض المستخدم. ومنذ Android 13، يجب أيضًا طلب إذن عرض الإشعارات بهذه الطريقة. ويمكن قصر بعض الأذونات على إصدارات معينة من Android بالسمة android:maxSdkVersion.
ومن الممارسات الجيدة ألا يطلب التطبيق إلا الأذونات التي يحتاجها فعلًا، إذ تقلل الأذونات غير الضرورية ثقة المستخدمين وقد تثير أسئلة أثناء المراجعة في Google Play. كما يمكن للمكتبات إضافة أذونات عبر دمج ملفات البيان، لذا ينبغي فحص ملف البيان المدمج قبل الإصدار، مثلًا بعرض Merged Manifest في Android Studio. وحيثما أمكن، ينبغي تفضيل البدائل التي لا تتطلب أي إذن، مثل أداة اختيار الصور الخاصة بالنظام.
كيف يُحدد نشاط التشغيل الخاص بالتطبيق في AndroidManifest.xml؟
يُحدد نشاط التشغيل الخاص بالتطبيق في AndroidManifest.xml بمنح نشاط مرشح نوايا يتضمن الإجراء android.intent.action.MAIN والفئة android.intent.category.LAUNCHER. ويخبر هذا النظام بأن النشاط ينبغي تشغيله عندما ينقر المستخدم على أيقونة التطبيق.
بدءًا من Android 12، يجب أيضًا أن تُحدد في الأنشطة التي تملك مرشح نوايا السمة android:exported، ويجب ضبطها على true بالنسبة إلى نشاط التشغيل. وإذا امتلكت عدة أنشطة هذه التركيبة، فقد تظهر عدة أيقونات في المشغّل، لذا لا يملكها عادة إلا نشاط واحد. وكثيرًا ما تُعالج شاشات البدء التي تتضمن شعارًا مثلًا في الوقت الحاضر بواجهة SplashScreen البرمجية.
ما الدور الذي يؤديه AndroidManifest.xml في دورة حياة التطبيق؟
لا يتحكم AndroidManifest.xml في دورة الحياة نفسها، لكنه يخبر النظام بالمكونات التي يتألف منها التطبيق وكيف يجوز تشغيلها. ويجب التصريح بالأنشطة والخدمات ومستقبلات البث وموفري المحتوى في الملف؛ وإلا فلن يستطيع النظام إنشاءها.
ويمكن لملف البيان أيضًا أن يؤثر في طريقة سير دورة الحياة. فبالسمة configChanges مثلًا، يمكن تحديد أن النشاط يتعامل بنفسه مع تدوير الشاشة بدلًا من إعادة إنشائه، وتحدد launchMode ما إذا كانت تُنشأ نسخ جديدة. وفضلًا عن ذلك، يمكن تحديد صنف Application مخصص، يُنشأ قبل جميع المكونات الأخرى عند بدء عملية التطبيق.
كيف تُحدد الحد الأدنى من إصدار SDK والإصدار المستهدف لتطبيق Android؟
يحدد الحد الأدنى من إصدار SDK والإصدار المستهدف إصدارات Android التي يدعمها التطبيق والإصدار الذي بُني واختُبر من أجله. وفي السابق، كانا يُحددان في AndroidManifest.xml بالعنصر uses-sdk، أما في المشاريع الحديثة فيُضبطان في ملف build.gradle الخاص بالوحدة بـ minSdk و targetSdk. ثم يُدرج Gradle القيم في ملف البيان النهائي.
يمثل minSdk أدنى إصدار من Android يمكن تثبيت التطبيق عليه. أما targetSdk فيخبر النظام بسلوك الإصدار وقواعده التي كُيّف التطبيق معها. ويشترط Google Play تحديث targetSdk بانتظام إلى إصدار حديث لكي تُنشر التطبيقات وتُحدَّث.
كيف يتم التعامل مع الأذونات المخصصة في AndroidManifest.xml؟
يمكن للتطبيق تعريف أذوناته الخاصة في AndroidManifest.xml بالعنصر permission. وهنا يُحدد اسم فريد، يستند عادة إلى اسم حزمة التطبيق، إلى جانب وصف ومستوى حماية. ويعني المستوى signature أن التطبيقات الموقّعة بالمفتاح نفسه وحدها يمكنها الحصول على الإذن، بينما يمنح المستويان normal و dangerous التطبيقات الأخرى الوصول بشروط مختلفة.
ويُستخدم الإذن لحماية مكونات التطبيق، مثلًا بضبط السمة android:permission على نشاط أو خدمة أو موفر محتوى. ويجب على التطبيقات الأخرى التي تريد استخدام المكون أن تطلب الإذن بـ uses-permission. وكثيرًا ما يُستخدم المستوى signature عندما تحتاج عدة تطبيقات من المطور نفسه إلى مشاركة البيانات بأمان.
AndroidManifest.xml for dummies
AndroidManifest.xml أشبه بجدول محتويات لتطبيق Android. فكّروا فيه كقائمة تخبر الهاتف بما يستطيع التطبيق فعله وكيف ينبغي أن يتصرف. وعند تثبيت تطبيق ما، ينظر الهاتف أولًا في هذا الملف ليعرف الميزات التي يحتاجها التطبيق، مثل الوصول إلى الإنترنت أو كاميرا الهاتف. وهنا أيضًا يحدد التطبيق كيف ينبغي أن يبدأ وما الأجزاء الموجودة فيه. لذا فإن AndroidManifest.xml ملف مهم يساعد الهاتف على فهم التطبيق والتعامل معه على النحو الصحيح.