نشرها ميغيل مونتيمايور، مهندس علاقات المطورين، Android
مع إصدار Android 16 في عام 2025، شاركنا رؤيتنا للنظام البيئي للأجهزة حيث تتكيف التطبيقات بسلاسة مع أي شاشة، سواء كان ذلك هاتفًا أو قابلاً للطي أو جهازًا لوحيًا أو سطح مكتب أو شاشة سيارة أو XR. يتوقع المستخدمون أن تعمل تطبيقاتهم في كل مكان. سواء أكنت تقوم بمهام متعددة على جهاز لوحي، أو فتح جهاز للقراءة بشكل مريح، أو تشغيل التطبيقات في بيئة نوافذ سطح المكتب، يتوقع المستخدمون أن تملأ واجهة المستخدم مساحة العرض المتاحة وتتكيف مع وضع الجهاز.
نحن أدخلت تغييرات كبيرة إلى واجهات برمجة التطبيقات (APIs) للتوجيه وتغيير الحجم لتسهيل السلوك التكيفي، مع توفير إلغاء الاشتراك المؤقت لمساعدتك في إجراء النقل. لقد رأينا بالفعل العديد من المطورين يتكيفون بنجاح مع هذا التحول عند استهداف مستوى واجهة برمجة التطبيقات (API) 36.
الآن مع إصدار Android 17 Beta، ننتقل إلى المرحلة التالية من خريطة الطريق التكيفية الخاصة بنا: يزيل Android 17 (مستوى واجهة برمجة التطبيقات 37) خيار إلغاء اشتراك المطور فيما يتعلق بقيود التوجيه وإمكانية تغيير الحجم على الأجهزة ذات الشاشات الكبيرة (سو> 600 ديسيبل). عندما تستهدف مستوى واجهة برمجة التطبيقات (API) 37، يجب أن يكون تطبيقك قادرًا على التكيف مع مجموعة متنوعة من أحجام العرض.
تضمن تغييرات السلوك أن نظام Android البيئي يوفر تجربة متسقة وعالية الجودة على جميع عوامل شكل الجهاز.
ما الذي تغير في Android 17؟
يجب أن تتأكد التطبيقات التي تستهدف Android 17 من توافقها مع الإلغاء التدريجي لسمات البيان وواجهات برمجة التطبيقات لوقت التشغيل المقدمة في Android 16. نحن ندرك أن هذا قد يكون بمثابة تحول كبير بالنسبة لبعض التطبيقات، لذلك قمنا بتضمين أفضل الممارسات والأدوات للمساعدة في تجنب المشكلات الشائعة لاحقًا في منشور المدونة هذا.
لم يتم إدخال أي تغييرات جديدة منذ Android 16، لكن إلغاء اشتراك المطور لم يعد ممكنًا. للتذكير: عندما يتم تشغيل تطبيقك على شاشة كبيرة – أين شاشة كبيرة يعني أن البعد الأصغر للشاشة أكبر من أو يساوي 600 dp – يتم تجاهل سمات البيان وواجهات برمجة التطبيقات التالية:
ملحوظة: كما ذكرنا سابقًا مع Android 16، لا تنطبق هذه التغييرات على الشاشات الأصغر من sw 600 dp أو التطبيقات المصنفة على أنها ألعاب بناءً على android:appCategory علَم.
| السمات الواضحة/واجهة برمجة التطبيقات | القيم التي تم تجاهلها |
| اتجاه الشاشة | عمودي، عكسي، عمودي، مستشعر، عمودي، مستخدم، عمودي، أفقي، عكسي، أفقي، مستشعر، أفقي، userLandscape |
| setRequestedOrientation() | عمودي، عكسي، عمودي، مستشعر، عمودي، مستخدم، عمودي، أفقي، عكسي، أفقي، مستشعر، أفقي، userLandscape |
| resizeableActivity | الجميع |
| minAspectRatio | الجميع |
| maxAspectRatio | الجميع |
كما يحتفظ المستخدمون بالسيطرة. في إعدادات نسبة العرض إلى الارتفاع، يمكن للمستخدمين الاشتراك بشكل صريح في استخدام السلوك المطلوب للتطبيق.
قم بإعداد التطبيق الخاص بك
ستحتاج التطبيقات إلى دعم التخطيطات الأفقية والعمودية لأحجام العرض في النطاق الكامل لنسب العرض إلى الارتفاع التي يمكن للمستخدمين اختيار استخدام التطبيقات فيها، بما في ذلك النوافذ التي يمكن تغيير حجمها، حيث لن تكون هناك طريقة لتقييد نسبة العرض إلى الارتفاع والاتجاه إلى الوضع الرأسي أو الأفقي.
اختبر تطبيقك
خطوتك الأولى هي اختبار تطبيقك بهذه التغييرات للتأكد من أن التطبيق يعمل بشكل جيد عبر أحجام العرض.
استخدم Android 17 Beta 1 مع محاكيات سلسلة Pixel Tablet وPixel Fold في Android Studio، وقم بتعيين targetSdkPreview = “سينامونبون”. وبدلاً من ذلك، يمكنك استخدام إطار توافق التطبيق من خلال تمكين UNIVERSAL_RESIZABLE_BY_DEFAULT ضع علامة إذا كان تطبيقك لا يستهدف مستوى واجهة برمجة التطبيقات (API) 36 حتى الآن.
لدينا أدوات إضافية لضمان تكييف تخطيطاتك بشكل صحيح. يمكنك تدقيق واجهة المستخدم الخاصة بك تلقائيًا والحصول على اقتراحات لجعل واجهة المستخدم الخاصة بك أكثر تكيفًا معها إنشاء فحص واجهة المستخدم، ومحاكاة خصائص العرض المحددة في اختباراتك باستخدام تجاوز تكوين الجهاز.
بالنسبة للتطبيقات التي تم تقييد الاتجاه ونسبة العرض إلى الارتفاع فيها تاريخيًا، فإننا نشهد عادةً مشكلات تتعلق بمعاينات الكاميرا المنحرفة أو الخاطئة، أو التخطيطات الممتدة، أو الأزرار التي لا يمكن الوصول إليها، أو فقدان حالة المستخدم عند التعامل مع تغييرات التكوين.
دعونا نلقي نظرة على بعض الاستراتيجيات لمعالجة هذه القضايا المشتركة.
التأكد من توافق الكاميرا
من المشاكل الشائعة في الأجهزة القابلة للطي ذات المناظر الطبيعية أو في حسابات نسبة العرض إلى الارتفاع في سيناريوهات مثل النوافذ المتعددة أو نوافذ سطح المكتب أو الشاشات المتصلة، عندما تظهر معاينة الكاميرا ممتدة أو مدورة أو مقصوصة.
تأكد من عدم تمديد معاينة الكاميرا أو تدويرها.
تحدث هذه المشكلة غالبًا على الشاشات الكبيرة والأجهزة القابلة للطي لأن التطبيقات تفترض علاقات ثابتة بين ميزات الكاميرا (مثل نسبة العرض إلى الارتفاع واتجاه المستشعر) وميزات الجهاز (مثل اتجاه الجهاز والاتجاه الطبيعي).
للتأكد من أن معاينة الكاميرا تتكيف بشكل صحيح مع أي حجم أو اتجاه للنافذة، فكر في هذه الحلول الأربعة:
الحل 1: Jetpack CameraX (المفضل)
الحل الأبسط والأقوى هو استخدام مكتبة Jetpack CameraX. إنه معاينةالعرض تم تصميم عنصر واجهة المستخدم للتعامل مع جميع تعقيدات المعاينة تلقائيًا:
-
معاينةالعرض يضبط بشكل صحيح لتوجيه المستشعر، وتدوير الجهاز، والقياس
-
معاينةالعرض يحافظ على نسبة العرض إلى الارتفاع لصورة الكاميرا، عادةً عن طريق التوسيط والاقتصاص (FILL_CENTER)
-
يمكنك ضبط نوع المقياس على FIT_CENTER إلى letterbox المعاينة إذا لزم الأمر
لمزيد من المعلومات، انظر تنفيذ المعاينة في وثائق CameraX.
الحل 2: عدسة الكاميرا
أناإذا كنت تستخدم قاعدة بيانات Camera2 موجودة، فإن CameraViewfinder المكتبة (المتوافقة مع الإصدارات السابقة لمستوى API 21) هي حل حديث آخر. إنه يبسط عرض تغذية الكاميرا باستخدام TextureView أو عرض السطح وتطبيق جميع التحويلات اللازمة (نسبة العرض إلى الارتفاع، والمقياس، والتدوير) بالنسبة لك.
لمزيد من المعلومات، راجع تقديم عدسة الكاميرا للكاميرا مشاركة مدونة و معاينة الكاميرا دليل المطور.
الحل 3: التنفيذ اليدوي للكاميرا 2
إذا لم تتمكن من استخدام CameraX أو CameraViewfinder، يجب عليك حساب الاتجاه ونسبة العرض إلى الارتفاع يدويًا والتأكد من تحديث الحسابات عند كل تغيير في التكوين:
-
احصل على اتجاه مستشعر الكاميرا (على سبيل المثال، 0، 90، 180، 270 درجة) من خصائص الكاميرا
-
الحصول على دوران العرض الحالي للجهاز (على سبيل المثال، 0، 90، 180، 270 درجة)
-
استخدم اتجاه مستشعر الكاميرا وقيم دوران العرض لتحديد التحويلات اللازمة لصورتك عرض السطح أو TextureView
-
تأكد من نسبة العرض إلى الارتفاع لمخرجاتك سطح يطابق نسبة العرض إلى الارتفاع لمعاينة الكاميرا لمنع التشويه
مهم: لاحظ أن تطبيق الكاميرا قد يكون قيد التشغيل في جزء من الشاشة، إما في وضع النوافذ المتعددة أو نافذة سطح المكتب أو على شاشة متصلة. ولهذا السبب، لا ينبغي استخدام حجم الشاشة لتحديد أبعاد عدسة الكاميرا؛ يستخدم مقاييس النافذة بدلاً من. وإلا فإنك تخاطر بمعاينة الكاميرا الممتدة.
لمزيد من المعلومات، راجع معاينة الكاميرا دليل المطور و تطبيق الكاميرا الخاص بك على عوامل شكل مختلفة فيديو.
الحل 4: تنفيذ إجراءات الكاميرا الأساسية باستخدام Intent
إذا لم تكن بحاجة إلى العديد من ميزات الكاميرا، فالحل البسيط والمباشر هو تنفيذ إجراءات الكاميرا الأساسية مثل التقاط صورة أو مقطع فيديو باستخدام تطبيق الكاميرا الافتراضي للجهاز. في هذه الحالة، يمكنك ببساطة استخدام نية بدلاً من التكامل مع مكتبة الكاميرات، لتسهيل الصيانة والقدرة على التكيف.
لمزيد من المعلومات، انظر نوايا الكاميرا.
تجنب واجهة المستخدم الممتدة أو الأزرار التي يتعذر الوصول إليها
إذا كان تطبيقك يفترض اتجاهًا محددًا للجهاز أو نسبة العرض إلى الارتفاع، فقد يواجه التطبيق مشكلات عند استخدامه الآن عبر اتجاهات أو أحجام نوافذ مختلفة.

تأكد من عدم تمدد الأزرار وحقول النص والعناصر الأخرى على الشاشات الكبيرة.
ربما تكون قد قمت بتعيين الأزرار والحقول النصية والبطاقات على fillMaxWidth أو match_parent. على الهاتف، يبدو هذا رائعًا. ومع ذلك، على الجهاز اللوحي أو الجهاز القابل للطي في الوضع الأفقي، تمتد عناصر واجهة المستخدم عبر الشاشة الكبيرة بأكملها. في Jetpack Compose، يمكنك استخدام widthIn معدّل لتعيين الحد الأقصى لعرض المكونات لتجنب المحتوى الممتد:
Box(
contentAlignment = Alignment.Center,
modifier = Modifier.fillMaxSize()
) {
Column(
modifier = Modifier
.widthIn(max = 300.dp) // Prevents stretching beyond 300dp
.fillMaxWidth() // Fills width up to 300dp
.padding(16.dp)
) {
// Your content
}
}
إذا فتح أحد المستخدمين تطبيقك في الاتجاه الأفقي على جهاز قابل للطي أو جهاز لوحي، فستظهر أزرار الإجراءات مثل يحفظ أو تسجيل الدخول في الجزء السفلي من الشاشة قد يتم عرضها خارج الشاشة. إذا لم تكن الحاوية قابلة للتمرير، فيمكن منع المستخدم من المتابعة. في Jetpack Compose، يمكنك إضافة ملف VerticalScroll تعديل للمكون الخاص بك:
Column(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(16.dp)
)
من خلال الجمع بين قيود الحد الأقصى للعرض والتمرير الرأسي، فإنك تضمن أن يظل تطبيقك فعالاً وقابلاً للاستخدام، بغض النظر عن مدى اتساع أو قصر حجم نافذة التطبيق.
انظر دليلنا على بناء تخطيطات التكيف.
الحفاظ على الحالة مع تغييرات التكوين
إن إزالة قيود الاتجاه ونسبة العرض إلى الارتفاع تعني أن حجم نافذة تطبيقك سيتغير بشكل متكرر. يمكن للمستخدمين تدوير أجهزتهم، أو طيها/فتحها، أو تغيير حجم تطبيقك ديناميكيًا في أوضاع تقسيم الشاشة أو نافذة سطح المكتب.
بشكل افتراضي، تعمل تغييرات التكوين هذه على تدمير نشاطك وإعادة إنشائه. إذا لم يتمكن تطبيقك من إدارة حدث دورة الحياة هذا بشكل صحيح، فسيواجه المستخدمون تجربة محبطة: تتم إعادة تعيين مواضع التمرير إلى الأعلى، ويتم مسح النماذج نصف المملوءة بشكل نظيف، ويتم فقدان سجل التنقل. لضمان تجربة تكيفية سلسة، من المهم أن يحافظ تطبيقك على حالته من خلال تغييرات التكوين هذه. باستخدام Jetpack Compose، يمكنك إلغاء الاشتراك في الترفيه، والسماح بتغييرات حجم النافذة بدلاً من ذلك بإعادة إنشاء واجهة المستخدم الخاصة بك لتعكس المقدار الجديد من المساحة المتوفرة.
انظر دليلنا على حفظ حالة واجهة المستخدم.
استهداف مستوى واجهة برمجة التطبيقات (API) 37 بحلول أغسطس 2027
إذا قام تطبيقك بإلغاء الاشتراك في هذه التغييرات مسبقًا عند استهداف مستوى واجهة برمجة التطبيقات (API) 36، فلن يتأثر تطبيقك إلا بإزالة إلغاء الاشتراك في Android 17 بعد أن يستهدف تطبيقك مستوى واجهة برمجة التطبيقات (API) 37. ولمساعدتك على التخطيط للمستقبل وإجراء التعديلات اللازمة على تطبيقك، إليك المخطط الزمني الذي ستدخل فيه هذه التغييرات حيز التنفيذ:
المواعيد النهائية لاستهداف مستوى معين من واجهة برمجة التطبيقات تكون خاصة بمتجر التطبيقات. بالنسبة إلى Google Play، ستكون هناك حاجة إلى تطبيقات وتحديثات جديدة لاستهداف مستوى واجهة برمجة التطبيقات (API) 37، مما يجعل هذا السلوك إلزاميًا للتوزيع في أغسطس 2027.
التحضير لنظام أندرويد 17
الرجوع إلى صفحة تغييرات أندرويد 17 لجميع التغييرات التي تؤثر على التطبيقات في Android 17. لاختبار تطبيقك، قم بتنزيل Android 17 Beta 1 وقم بالتحديث إلى targetSdkPreview = “سينامونبون” أو استخدم إطار توافق التطبيق لتمكين تغييرات محددة.
مستقبل Android قابل للتكيف، ونحن هنا لمساعدتك في تحقيق ذلك. بينما تستعد لنظام التشغيل Android 17، نشجعك على مراجعة أدلةنا الخاصة به بناء تخطيطات التكيف ولدينا إرشادات جودة الشاشة الكبيرة. تم تصميم هذه الموارد لمساعدتك في التعامل مع عوامل الأشكال وأحجام النوافذ المتعددة بثقة.
لا تنتظر. ابدأ الاستعداد لنظام Android 17 اليوم!

