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

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

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

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

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

يصف ملف 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 بشكل تلقائي على Android 3.0 والإصدارات الأحدث. لإضافة عناصر قائمة إلى شريط الإجراءات بعد ذلك، عليك ضبط 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">

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