مستوى واجهة برمجة تطبيقات Android ، التوافق مع الإصدارات السابقة والأمامية

مساء الخير يا اصدقاء. قمنا بإعداد ترجمة مفيدة لطلاب Android Developer في المستقبل. دورة متقدمة . " يسعدنا مشاركة هذه المواد معك.




إذا كنت تقرأ هذا المقال ، فهذا يعني أنك قد تكون مهتمًا بأمور مثل:

  • ماذا يعني مستوى API؟
  • كيفية استخدام minSdkVersion أو targetSdkVersion أو targetSdkVersion ؟
  • كيف يمكنني ضمان أن التطبيق سوف يعمل بشكل صحيح على الأجهزة مع إصدارات مختلفة من نظام التشغيل؟



جميع هذه المفاهيم مرتبطة ببعضها البعض ، وسأحاول شرحها لك في هذه المقالة بطريقة بسيطة ولكنها فعالة.

للقيام بذلك ، تحتاج إلى فهم الفرق بين SDK وواجهة برمجة التطبيقات ومعرفة مستوى API في نظام Android البيئي.

صحيح أن هناك علاقة 1: 1 في نظام Android في SDK وواجهة برمجة التطبيقات ، وغالبًا ما يتم استخدام هذين المصطلحين بشكل مترادف ، لكن من المهم أن نفهم أن هذا ليس هو نفس الشيء.

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

SDK


انها تقف لمجموعة تطوير البرمجيات . انتبه إلى كلمة "kit" (kit) ... فهي تتكون فقط من مجموعة من الأدوات المختلفة والمكتبات والوثائق والأمثلة التي تساعد المطورين على إنشاء تطبيقات Android وتصحيحها وتشغيلها. يتم توفير API مع SDK.

إذا قمت بفتح SDK Manager في Android Studio ، يمكنك أن ترى بوضوح ما يتكون منه Android SDK.

تسرد علامة التبويب الأولى من Platform SDK SDKs لكل إصدار من Android.

كما هو موضح في الصورة أدناه ، يحتوي Android 9.0 SDK (المعروف أيضًا باسم Pie) على:

  • Android SDK Platform 28 (هذا هو إطار عمل API ).
  • شفرة المصدر لنظام أندرويد 28 (هذا هو تطبيق واجهة برمجة التطبيقات ، كما ترون ، إنه اختياري ... تذكر هذا).
  • ومجموعة من الأشياء الأخرى ... على سبيل المثال ، صور النظام المختلفة لمحاكي Android.


نظرة عامة على SDK في Android Studio SDK Manager.

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

API


لتقف على واجهة برمجة التطبيقات . إنها مجرد واجهة ، طبقة تجريدية توفر رابطًا بين "جزأين" مختلفين من البرنامج. يعمل مثل العقد بين موفر (على سبيل المثال ، مكتبة) والمستهلك (على سبيل المثال ، تطبيق).

هذه مجموعة من التعريفات الرسمية ، مثل الفئات والطرق والوظائف والوحدات النمطية والثوابت ، والتي يمكن استخدامها من قبل المطورين الآخرين لكتابة التعليمات البرمجية الخاصة بهم. ومع ذلك ، لا يتضمن API تطبيق.

مستوى API


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

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

والآن قد يتساءل شخص ما ...

إذا كانت واجهة برمجة تطبيقات Android API لا توفر تطبيقًا ، ويقدم مدير SDK شفرة مصدر API قابلة للتحميل اختياريًا كجزء من SDK ، فأين هو التنفيذ المقابل؟

الجواب بسيط. على الجهاز.

دعونا معرفة ذلك ...

من شفرة المصدر إلى ملف APK


نموذجيًا ، يتكون مشروع Android من كود مكتوب من قبل المطورين باستخدام Android API (وحدة التطبيق) ، وكذلك بعض المكتبات / التبعيات الأخرى (ملفات .jar ، AAR ، وحدات ، وما إلى ذلك) والموارد.

تقوم عملية التحويل البرمجي بتحويل التعليمات البرمجية المكتوبة بلغة Java أو Kotlin ، بما في ذلك التبعيات (أحد أسباب تقليل الكود الخاص بك!) ، إلى DEX bytecode ، ثم ضغط كل شيء في ملف APK مع الموارد. في هذه المرحلة ، لا يتم تضمين تطبيق API في APK النهائي!


بناء العملية - مطورو Android

ملفات DEX و Android Runtime



هندسة أندرويد - مطورو أندرويد

Android Runtime هو المكان الذي تتم فيه جميع الأعمال القذرة وحيث يتم تنفيذ ملفات DEX. يتكون من مكونين رئيسيين:

  • جهاز افتراضي للاستفادة من قابلية رمز واستقلال النظام الأساسي. بدءًا من Android 5.0 (Lollipop) ، تم استبدال وقت التشغيل القديم ، Dalvik Virtual Machine ، بالكامل بنظام Android RunTime (ART) الجديد. استخدم Dalvik برنامج التحويل البرمجي JIT ، بينما يستخدم ART التحويل البرمجي AOT (Ahead of time) بالإضافة إلى JIT لملف تعريف الشفرة في وقت التشغيل.
  • المكتبات الأساسية هي مكتبات Java و Android القياسية. ببساطة ، هذا هو المكان الذي يوجد فيه تطبيق API.

يتوافق إصدار واجهة برمجة التطبيقات (API) المتوفرة في هذا المستوى مع إصدار نظام Android الذي يتم تشغيل التطبيق عليه.
على سبيل المثال ، إذا تم تثبيت Android 9 (Pie) على الجهاز الفعلي ، فستكون جميع واجهات برمجة التطبيقات (APIs) حتى المستوى 28 متاحة.

إذا فهمت النقاط الرئيسية في Android Runtime وما هو دور واجهة برمجة التطبيقات ، فيجب أن يكون من السهل فهم التوافق مع الإصدارات السابقة compileSdkVersion ، بالإضافة إلى استخدام compileSdkVersion و minSdkVersion و targetSdkVersion .

compileSdkVersion


يتم استخدام هذه القيمة فقط لإخبار Gradle عن أي إصدار من SDK يقوم بترجمة التطبيق الخاص بك. هذا يسمح للمطورين بالوصول إلى جميع واجهات برمجة التطبيقات المتاحة حتى مستوى مجموعة API ل compileSdkVersion .

الترجمة باستخدام أحدث إصدار من SDK ينصح بشدة:

  • يتيح المستوى العالي من واجهة برمجة التطبيقات للمطورين الاستفادة من أحدث واجهة برمجة التطبيقات والفرص التي توفرها المنصات الجديدة.
  • لاستخدام أحدث إصدار من SupportLibrary ، يجب أن compileSdkVersion مع إصدار SupportLibrary .

على سبيل المثال ، لاستخدام SupportLibrary-28.xx ، يجب أن يكون compileSdkVersion أيضًا 28.

  • للتبديل إلى AndroidX أو استخدامه ، يجب ضبط compileSdkVersion على 28 على الأقل.
  • لتكون على استعداد لتلبية متطلبات مستوى API المستهدف من Google Play . أعلنت Google أنها ستقوم في كل عام بتعيين الحد الأدنى من مستوى واجهة برمجة التطبيقات للتطبيقات والتحديثات الجديدة لنشر إصدارات Android الجديدة في سوق Google بسرعة أكبر. يمكنك العثور على مزيد من المعلومات هنا وهنا .

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

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

على سبيل المثال:

يمكن للتطبيق + compileSdkVersion = 26 وطريقة API xyz() ، المقدمة في مستوى API 26 ، العمل على جهاز يعمل بنظام Android 8 Oreo (مستوى API 26).

يمكن أن يعمل التطبيق نفسه على جهاز يعمل بنظام Android 9 Pie (مستوى واجهة برمجة التطبيقات (API) 28) ، نظرًا لأن طريقة واجهة برمجة التطبيقات xyz() API) xyz() لا تزال متاحة على مستوى واجهة برمجة التطبيقات (28).

إصدار minSdk


تشير هذه القيمة إلى الحد الأدنى لمستوى واجهة برمجة التطبيقات التي يمكن تشغيل التطبيق بها. هذا هو الحد الأدنى من المتطلبات. إذا لم تكن محددة ، فإن القيمة الافتراضية هي 1 .

يتعين على المطورين تعيين القيمة الصحيحة وضمان التشغيل الصحيح للتطبيق حتى مستوى API هذا. وهذا ما يسمى التوافق إلى الوراء .

أثناء التطوير ، ستحذر Lint أيضًا المطورين عندما يحاولون استخدام أي واجهة برمجة التطبيقات (API) أدناه المحددة في minSdkVersion . من المهم للغاية عدم تجاهل التحذيرات وتصحيحها!

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

من المهم أيضًا الإشارة إلى أن متجر Google Play يستخدم هذه القيمة لتحديد ما إذا كان يمكن تثبيت التطبيق على جهاز معين من خلال مقارنة إصدار النظام الأساسي للجهاز مع تطبيق minSdkVersion .

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

يعد اختيار القيمة "الصحيحة" للمشروع أيضًا قرارًا تجاريًا ، حيث إنه يؤثر على حجم جمهور التطبيق. انظر إلى توزيع المنصات .

على سبيل المثال:

يمكن للتطبيق + compileSdkVersion = 26 + minSdkVersion = 22 وطريقة API xyz() المقدمة في مستوى API 26 العمل على جهاز يعمل بنظام Android 8 Oreo (مستوى API 26).

يمكن تثبيت التطبيق نفسه وتشغيله على جهاز قديم مع Android 5.1 Lollipop (مستوى API 22) ، حيث لا توجد طريقة API xyz() . إذا لم يوفر المطورون توافقًا مع الإصدارات السابقة إما من خلال اختبارات وقت التشغيل أو من خلال أي مكتبات ، فسوف يتعطل التطبيق بمجرد محاولة الوصول إلى طريقة واجهة برمجة تطبيقات xyz() .

targetSdkVersion


تشير هذه القيمة إلى مستوى واجهة برمجة التطبيقات التي تم تطوير التطبيق بها.

لا تخلط بينه وبين compileSdkVersion . يتم استخدام الأخير فقط في وقت الترجمة ويجعل واجهات برمجة التطبيقات الجديدة متاحة للمطورين. الأول ، على النقيض من ذلك ، هو جزء من APK (وكذلك minSdkVersion ) ويغير سلوك وقت التشغيل. هذه هي الطريقة التي يمكن للمطورين التحكم في التوافق المباشر .

في بعض الأحيان قد تكون هناك بعض تغييرات واجهة برمجة التطبيقات في النظام الأساسي والتي يمكن أن تؤثر على سلوك التطبيق عند العمل في بيئة وقت تشغيل جديدة.

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

مثال بسيط على ذلك هو Runtime Permission ، والذي تم تقديمه في Android 6 Marshmallow (مستوى API 23).

يمكن تجميع تطبيق ما باستخدام واجهة برمجة التطبيقات (API) من المستوى 23 ، لكن لديه واجهة برمجة التطبيقات (API) من المستوى 22 المستهدف إذا لم يكن جاهزًا بعد لدعم نموذج أذونات وقت التشغيل الجديد.

وبالتالي ، يمكن أن يظل التطبيق متوافقًا دون تضمين سلوك وقت التشغيل الجديد.

في أي حال ، كما ذكرنا سابقًا ، تطلب Google من التطبيقات تلبية المتطلبات الجديدة لمستوى واجهة برمجة التطبيقات المستهدفة ، لذلك يجب أن تكون لديك دائمًا أولوية عالية لتحديث هذه القيمة.

الآن وضع كل ذلك معا ، ونحن نرى علاقة واضحة

minSdkVersion ≤ targetSdkVersion ≤ compileSdkVersion

ضع في اعتبارك أنه يوصى بشدة أن تقوم بالتجميع باستخدام أحدث مستوى من واجهة برمجة التطبيقات ومحاولة استخدام targetSdkVersion == compileSdkVersion .

مصادر


Source: https://habr.com/ru/post/ar466367/


All Articles