إتاحة إصدارات مختلفة من النظام الأساسي

على الرغم من أن أحدث إصدارات Android توفر غالبًا واجهات برمجة تطبيقات رائعة لتطبيقك، إلا أنه يجب عليك الاستمرار للتوافق مع الإصدارات القديمة من Android إلى أن يتم تحديث المزيد من الأجهزة. توضّح لك هذه الدرس كيفية الاستفادة من أحدث واجهات برمجة التطبيقات مع مواصلة استخدام الإصدارات القديمة أيضًا.

استخدِم معالج مشروع جديد في "استوديو Android" لمعرفة توزيع التطبيقات النشطة على أجهزة تعمل بكل إصدار من إصدارات Android. يستند هذا التوزيع إلى عدد الأجهزة التي تزور "متجر Google Play". بشكل عام، ننصحك بتوفير التوافق مع ‎90% تقريبًا من الأجهزة النشطة، مع استهداف أحدث إصدار من تطبيقك.

نصيحة: بهدف توفير أفضل الميزات الوظائف عبر العديد من إصدارات Android، فيجب استخدام مكتبة دعم Android في التطبيق، والتي تتيح لك استخدام عدة واجهات برمجة تطبيقات حديثة للنظام الأساسي في الإصدارات الأقدم.

تحديد الحد الأدنى ومستوى واجهة برمجة التطبيقات المستهدَف

يصف ملف AndroidManifest.xml تفاصيل عن تطبيقك ويحدِّد إصدارات Android المتوافقة معه. على وجه التحديد، تحدِّد سمتا minSdkVersion وtargetSdkVersion للعنصر <uses-sdk> أدنى مستوى لواجهة برمجة التطبيقات يكون تطبيقك متوافقًا معه وأعلى مستوى لواجهة برمجة التطبيقات الذي صمّمت تطبيقك واختبرت أداءه وفقًا له.

مثلاً:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
    ...
</manifest>

ومع طرح إصدارات جديدة من Android، قد تتغيّر بعض الأنماط والسلوكيات. للسماح لتطبيقك بالاستفادة من هذه التغييرات والتأكّد من أنّ تطبيقك يناسب أسلوب جهاز كل مستخدم، عليك ضبط قيمة targetSdkVersion لتتطابق مع أحدث إصدار من Android متاح.

التحقّق من إصدار النظام أثناء التشغيل

يقدّم Android رمزًا فريدًا لكل إصدار من النظام الأساسي في فئة Build الثوابت. استخدِم هذه الرموز البرمجية في تطبيقك لإنشاء شروط تضمن عدم تنفيذ الرمز البرمجي الذي يعتمد على مستويات أعلى لواجهة برمجة التطبيقات إلا عندما تكون واجهات برمجة التطبيقات هذه متاحة على النظام.

Kotlin

private fun setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        actionBar.setDisplayHomeAsUpEnabled(true)
    }
}

Java

private void setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

ملاحظة: عند تحليل موارد XML، يتجاهل Android سمات XML التي لا يتوافق معها الجهاز الحالي. وبالتالي، يمكنك استخدام سمات XML التي لا تتوفّر إلا في الإصدارات الأحدث بأمان بدون القلق بشأن تعطُّل الإصدارات القديمة عند التعرّف على هذا الرمز. على سبيل المثال، إذا ضبطت القيمة targetSdkVersion="11"، سيتضمّن تطبيقك القيمةActionBar تلقائيًا على الإصدار 3.0 من Android والإصدارات الأحدث. لإضافة عناصر قائمة إلى شريط الإجراءات، عليك ضبط android:showAsAction="ifRoom" في ملف XML لمورد القائمة. من الآمن إجراء ذلك في ملف XML متعدد الإصدارات، نظرًا لأن الإصدارات القديمة من Android تتجاهل showAsAction (أي أنّك لست بحاجة إلى سمة منفصلة الإصدار في res/menu-v11/).

استخدام أنماط المنصة ومظاهرها

يوفّر Android مظاهر تجربة المستخدم التي تمنح التطبيقات شكلاً وأسلوبًا مماثلَين لتلك المعروضة في النظام التشغيل الأساسي. يمكن تطبيق هذه السمات على تطبيقك داخل ملف البيان. باستخدام هذه الأنماط والمظاهر المضمّنة، سيتّبع تطبيقك بشكلٍ طبيعي أحدث مظهر وأسلوب لنظام التشغيل Android مع كل إصدار جديد.

لجعل نشاطك يبدو مثل مربّع حوار:

<activity android:theme="@android:style/Theme.Dialog">

لإضافة خلفية شفافة إلى نشاطك:

<activity android:theme="@android:style/Theme.Translucent">

لتطبيق المظهر المخصّص المحدّد في /res/values/styles.xml:

<activity android:theme="@style/CustomTheme">

لتطبيق مظهر على تطبيقك بالكامل (جميع الأنشطة)، أضِف android:theme سمة إلى العنصر <application>:

<application android:theme="@style/CustomTheme">

للحصول على مزيد من المعلومات حول إنشاء المظاهر واستخدامها، اقرأ دليل الأنماط والمظاهر.