إصدار تطبيقك

تحديد الإصدارات هو عنصر مهم في ترقية التطبيقات وصيانتها الاستراتيجية. وتعود أهمية تحديد الإصدارات إلى الأسباب التالية:

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

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

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

تختلف متطلبات تحديد الإصدارات بين المشروعات المختلفة. مع ذلك، يرى العديد من المطوّرين تحديد إصدارات دلالية كأساس جيد استراتيجية تحديد الإصدارات.

ضبط معلومات إصدار التطبيق

لتحديد معلومات إصدار تطبيقك، عليك ضبط قيم الإصدار. الإعدادات في ملفات إصدار Gradle:

Groovy

    android {
      namespace 'com.example.testapp'
      compileSdk 33

      defaultConfig {
          applicationId "com.example.testapp"
          minSdk 24
          targetSdk 33
          versionCode 1
          versionName "1.0"
          ...
      }
      ...
    }
    ...
    

Kotlin

    android {
      namespace = "com.example.testapp"
      compileSdk = 33

      defaultConfig {
          applicationId = "com.example.testapp"
          minSdk = 24
          targetSdk = 33
          versionCode = 1
          versionName = "1.0"
          ...
      }
      ...
    }
    ...
      

إعدادات الإصدار

حدِّد قيمًا لكلّ من إعدادَي الإصدار المتوفّرَين: versionCode و versionName

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

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

ملاحظة: أعلى قيمة يتيحها Google Play قيمة versionCode هي 2100000000.

لا يمكنك تحميل حزمة APK إلى "متجر Play" باستخدام versionCode لديك. مستخدم بالفعل لإصدار سابق.

ملاحظة: في بعض الحالات، قد تحتاج إلى يجب تحميل إصدار من تطبيقك يتضمّن versionCode أقل من أعلى إصدار. النسخة الحديثة. على سبيل المثال، إذا كنت تنشر حِزم APK متعددة، قد يكون لديك نطاقات versionCode المُعدّة مسبقًا لحِزم APK معيّنة. لمزيد من المعلومات حول تعيين versionCode قيمة لملفات APK متعددة، راجع تعيين رموز الإصدارات.

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

versionName

سلسلة تُستخدم كرقم الإصدار المعروض المستخدمين. يمكن تحديد هذا الإعداد كسلسلة أولية أو كمرجع مورد السلسلة.

القيمة هي سلسلة بحيث يمكنك وصف إصدار التطبيق <major>.<minor>.<point> سلسلة أو أي نوع آخر من بمعرف الإصدار المطلق أو النسبي. versionName هي القيمة الوحيدة عرضها للمستخدمين.

تحديد قيم الإصدار

يمكنك تحديد القيم التلقائية لهذه الإعدادات من خلال تضمينها في كتلة "defaultConfig {}" مدمجة في android {} من الملف build.gradle أو build.gradle.kts في الوحدة. يمكنك ثم إلغاء هذه القيم التلقائية لإصدارات مختلفة من تطبيقك من خلال تحديد الأساسية لأنواع التصميم الفردية أو نكهات المنتجات. يعرض الملف التالي ملف إعدادات versionCode وversionName في defaultConfig {} وكذلك جزء productFlavors {}.

وبعد ذلك، يتم دمج هذه القيم في ملف بيان تطبيقك أثناء عملية التصميم.

Groovy

    android {
        ...
        defaultConfig {
            ...
            versionCode 2
            versionName "1.1"
        }
        productFlavors {
            demo {
                ...
                versionName "1.1-demo"
            }
            full {
                ...
            }
        }
    }
    

Kotlin

    android {
        ...
        defaultConfig {
            ...
            versionCode = 2
            versionName = "1.1"
        }
        productFlavors {
            create("demo") {
                ...
                versionName = "1.1-demo"
            }
            create("full") {
                ...
            }
        }
    }
    

في كتلة defaultConfig {} من هذا المثال، تشير تشير قيمة versionCode إلى أنّ حزمة APK الحالية تحتوي على الإصدار الثاني من التطبيق، وتحدِّد سلسلة versionName سيظهر للمستخدمين على شكل الإصدار 1.1. يحدد هذا الملف أيضًا نكهتين للمنتج، "عرض توضيحي" و"كامل". منذ "العرض التوضيحي" تعرف نكهة المنتج versionName على أنها "1.1-demo" و"العرض التوضيحي" تستخدم الإصدار versionName بدلاً من القيمة التلقائية. فيلم "الكامل" لا تحدّد كتلة نكهة المنتج versionName، لذا تستخدم القيمة الافتراضية "1.1".

ملاحظة: إذا كان تطبيقك يحدِّد إصدار التطبيق مباشرةً من خلال <manifest>، أي قيم الإصدار في إصدار Gradle ملف تجاوز الإعدادات في البيان. بالإضافة إلى ذلك، فإن تحديد هذه المحددة في ملفات إصدار Gradle لك تحديد قيم مختلفة وإصدارات مختلفة من تطبيقك. لمزيد من المرونة ولتجنب يمكن استبداله بعد دمج البيان، يُرجى إزالة هذه من العنصر <manifest> وتحديد إعدادات الإصدار في ملفات إصدار Gradle بدلاً من ذلك.

يوفّر إطار عمل Android واجهة برمجة تطبيقات تتيح لك طلب بيانات من النظام. للحصول على معلومات حول إصدار تطبيقك للحصول على معلومات الإصدار، استخدام طريقة PackageManager.getPackageInfo(java.lang.String, int).

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

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

ملاحظة: في حال تحديد متطلبات مستوى واجهة برمجة التطبيقات مباشرةً في ملف بيان التطبيق، فإن الإعدادات المقابلة في ملفات الإصدار تجاوز الإعدادات في ملف البيان. بالإضافة إلى ذلك، فإن تحديد هذه المحددة في ملفات إصدار Gradle لك تحديد قيم مختلفة وإصدارات مختلفة من تطبيقك. لمزيد من المرونة ولتجنب يمكن استبداله بعد دمج البيان، يُرجى إزالة هذه من العنصر <uses-sdk> وتحديد واجهة برمجة التطبيقات الجديدة في ملفات إصدار Gradle بدلاً من ذلك.

يتوفّر إعدادان على مستوى واجهة برمجة التطبيقات:

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

لتحديد متطلبات مستوى واجهة برمجة التطبيقات التلقائية في build.gradle أو build.gradle.kts، يمكنك إضافة إعداد واحد أو أكثر من إعدادات مستوى واجهة برمجة التطبيقات إلى كتلة defaultConfig{}، مدمجة داخل مجموعة android {}. يمكنك أيضًا إلغاء هذه القيم الافتراضية لمختلف مختلفة من تطبيقك عن طريق إضافة الإعدادات لتصميم أنواع أو نكهات منتجات.

يحدد الملف التالي خيارات إعدادات minSdk وtargetSdk في حظر "defaultConfig {}" وإلغاء "minSdk" لنكهة منتج واحدة:

Groovy

android {
    ...
    defaultConfig {
        ...
        minSdk 21
        targetSdk 33
    }
    productFlavors {
        main {
            ...
        }
        afterNougat {
            ...
            minSdk 24
        }
    }
}

Kotlin

android {
    ...
    defaultConfig {
        ...
        minSdk = 21
        targetSdk = 33
    }
    productFlavors {
        create("main") {
            ...
        }
        create("afterNougat") {
            ...
            minSdk = 24
        }
    }
}

عند الاستعداد لتثبيت تطبيقك، يتحقق النظام من قيمة هذه الإعدادات وتقارنها بإصدار النظام. إذا كانت minSdk أكبر من إصدار النظام، نظام منع تثبيت التطبيق.

إذا لم تحدِّد هذه الإعدادات، سيفترض النظام أنّ تطبيقك متوافقة مع جميع إصدارات الأنظمة الأساسية. يعادل ذلك ضبط minSdk على 1

لمزيد من المعلومات، يُرجى الاطّلاع على مقالة ما هو مستوى واجهة برمجة التطبيقات؟. للاطّلاع على إعدادات إصدار Gradle، يُرجى الاطّلاع على ضبط صيغ الإصدار.