مستوى واجهة برمجة التطبيقات: 17
Android 4.2 (JELLY_BEAN_MR1
)
هو تحديث لإصدار Jelly Bean يقدّم ميزات جديدة للمستخدمين ومطوّري التطبيقات. يقدّم هذا المستند مقدّمة عن واجهات برمجة التطبيقات الجديدة الأكثر بروزًا
وفائدة للمطوّرين.
بصفتك مطوّر تطبيقات، عليك تنزيل صورة نظام Android 4.2 ومنصّة حزمة تطوير البرامج (SDK) من مدير حزمة تطوير البرامج (SDK) في أقرب وقت ممكن. إذا كنت لم يكن لديك جهاز يعمل بنظام التشغيل Android 4.2 حيث يمكنك اختبار تطبيقك عليه، واستخدام نظام Android 4.2 لاختبار تطبيقك على محاكي Android. بعد ذلك صمم تطبيقاتك وفقًا للنظام الأساسي Android 4.2 لتبدأ في استخدام أحدث واجهات برمجة التطبيقات.
لتحسين تطبيقك بشكل أفضل على الأجهزة التي تعمل بالإصدار 4.2 من نظام التشغيل Android،
عليك ضبط targetSdkVersion
على
"17"
، وتثبيته على صورة نظام Android 4.2،
واختباره، ثم نشر تحديث يتضمّن هذا التغيير.
إِنْتَ
استخدام واجهات برمجة التطبيقات في الإصدار 4.2 من نظام التشغيل Android مع دعم الإصدارات الأقدم أيضًا من خلال إضافة
الشروط إلى الرمز البرمجي الذي يتحقّق من مستوى واجهة برمجة تطبيقات النظام قبل التنفيذ
واجهات برمجة التطبيقات غير متوافقة مع minSdkVersion
.
للاطّلاع على مزيد من المعلومات حول
الحفاظ على التوافق مع الإصدارات القديمة، يمكنك قراءة مقالة إنشاء واجهة مستخدم
متوافقة مع الإصدارات القديمة.
يتوفّر مزيد من المعلومات حول طريقة عمل مستويات واجهة برمجة التطبيقات في مقالة ما هي واجهة برمجة التطبيقات؟ ما هو المستوى؟
تغييرات مهمة في السلوك
إذا سبق لك نشر تطبيق لنظام التشغيل Android، عليك الانتباه إلى التغييرات التالية التي قد تؤثر في سلوك تطبيقك:
- لم يعُد يتم تصدير موفّري المحتوى تلقائيًا. أي أن القيمة الافتراضية
بالنسبة إلى السمة
android:exported
أصبح الآن“false"
. إذا كان من المهم أن تتمكّن التطبيقات الأخرى من الوصول إلى مقدّم المحتوى، عليك الآن ضبط القيمة علىandroid:exported="true"
بشكل صريح.لا يسري هذا التغيير إلا في حال ضبط
android:targetSdkVersion
أوandroid:minSdkVersion
على 17 أو أعلى. بخلاف ذلك، تظل القيمة التلقائية هي“true"
حتى عند التشغيل على الإصدار 4.2 من نظام التشغيل Android والإصدارات الأحدث. - مقارنةً بالإصدارات السابقة من Android، قد تكون نتائج الموقع الجغرافي للمستخدم أقل دقة.
إذا كان تطبيقك يطلب إذن "
ACCESS_COARSE_LOCATION
" ولكن لا يطلب إذنACCESS_FINE_LOCATION
.لتلبية توقعات المستخدمين بشأن الخصوصية عندما يطلب تطبيقك إذنًا للحصول على الموقع الجغرافي التقريبي (وليس الموقع الجغرافي الدقيق)، لن يقدّم النظام تقديرًا لموقع المستخدم الجغرافي يكون أكثر دقة من قطعة أرض في المدينة.
- أصبحت الآن بعض إعدادات الجهاز التي حدّدها
Settings.System
متاحة للقراءة فقط. إذا حاول تطبيقك كتابة تغييرات على الإعدادات المحدّدة فيSettings.System
والتي تم نقلها إلىSettings.Global
، ستتعذّر عملية الكتابة بدون إشعار عند تشغيل التطبيق على نظام التشغيل Android 4.2 والإصدارات الأحدث.حتى إذا كانت قيمة
android:targetSdkVersion
وandroid:minSdkVersion
أقل من 17، لا يمكن لتطبيقك تعديل الإعدادات التي تحتوي على تم نقلها إلىSettings.Global
عند تشغيله على الإصدار 4.2 من Android أو الإصدارات الأحدث. - إذا كان تطبيقك يستخدم
WebView
، يضيف Android 4.2 طبقة إضافية من الأمان حتى تتمكّن من ربط JavaScript برمز Android بأمان أكبر. إذا ضبطتtargetSdkVersion
على 17 أو إصدار أحدث، عليك الآن إضافة التعليق التوضيحي@JavascriptInterface
إلى أي طريقة تريد أن تكون متاحة لملف JavaScript (يجب أن تكون الطريقة علنية أيضًا). إذا لم يتم تقديم التعليق التوضيحي، لا يمكن الوصول إلى هذه الطريقة من خلال صفحة ويب فيWebView
عند تشغيله على الإصدار 4.2 من نظام التشغيل Android أو الإصدارات الأحدث. إذا قمت بتعيينtargetSdkVersion
إلى 16 أو أقل، ليس هناك حاجة للتعليق التوضيحي، ولكن ننصحك بتحديث الإصدار المستهدف وإضافة تعليق توضيحي لمزيد من الأمان.قراءة المزيد عن الربط رمز JavaScript إلى رمز Android.
Daydream
أحلام اليقظة هي وضع شاشة استراحة تفاعلي جديد لأجهزة Android. يتم تفعيل هذه الميزة تلقائيًا عند إدخال الجهاز في قاعدة شحن أو عند ترك الجهاز في وضع الخمول أثناء توصيله بشاحن (بدلاً من إيقاف الشاشة). يعرض تطبيق Daydream حلمًا واحدًا في المرة الواحدة، وقد يكون عرضًا سلبيًا بصريًا بحتًا يتم إغلاقه عند لمس الشاشة، أو قد يكون تفاعليًا وسريع الاستجابة للمجموعة الكاملة من أحداث الإدخال. يتم تشغيل تطبيقاتك في عملية تطبيقك، ويمكنها الوصول بشكل كامل إلى مجموعة أدوات واجهة مستخدم Android، بما في ذلك طرق العرض والتنسيقات والرسوم المتحرّكة، لذا فهي أكثر مرونة و فعالية من الخلفيات الحية أو التطبيقات المصغّرة.
يمكنك إنشاء حلم لـ Daydream من خلال تنفيذ فئة فرعية من DreamService
. تم تصميم واجهات برمجة تطبيقات DreamService
لتتشابه مع واجهات برمجة تطبيقات Activity
. لتحديد واجهة المستخدم لملف
الحلم، عليك تمرير معرّف مورد تنسيق أو View
إلى setContentView()
في أي وقت بعد أن يكون لديك
نافذة، مثل onAttachedToWindow()
الاستدعاء.
توفّر فئة DreamService
طرقًا مهمة أخرى لطلبات إعادة الاتصال بالعمليات المتعلّقة بالدورة الحيوية
، بالإضافة إلى واجهات برمجة التطبيقات الأساسية Service
، مثل onDreamingStarted()
وonDreamingStopped()
وonDetachedFromWindow()
.
لا يمكنك بدء DreamService
من
تطبيق — يتم تشغيله تلقائيًا بواسطة النظام.
إذا كان الحلم تفاعليًا، يمكنك بدء نشاط من الحلم لإرسال المستخدم إلى
واجهة المستخدم الكاملة لتطبيقك للحصول على مزيد من التفاصيل أو التحكّم. يمكنك استخدام finish()
لإنهاء الحلم حتى يتمكّن المستخدم من رؤية
النشاط الجديد.
لإتاحة ميزة "الحلم الافتراضي" للنظام، يجب إدراج DreamService
باستخدام عنصر <service>
في ملف البيان. يجب بعد ذلك تضمين فلتر أهداف يتضمّن الإجراء "android.service.dreams.DreamService"
. مثلاً:
<service android:name=".MyDream" android:exported="true" android:icon="@drawable/dream_icon" android:label="@string/dream_label" > <intent-filter> <action android:name="android.service.dreams.DreamService" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </service>
هناك بعض الطرق المفيدة الأخرى في DreamService
التي يجب الانتباه إليها:
- يتحكّم العنصر
setInteractive(boolean)
في ما إذا كان الحلم يتلقّى أحداث الإدخال أو يخرج فورًا عند إدخال المستخدم. إذا كان الحلم تفاعليًا، يمكن للمستخدم استخدام زرَّي رجوع أو الصفحة الرئيسية للخروج من الحلم، أو يمكنك استدعاءfinish()
لإيقاف الحلم. - إذا كنت تريد عرضًا شاملاً بالكامل، يمكنك النقر على
setFullscreen()
لإخفاء شريط الحالة. - قبل بدء أحلام اليقظة، يخفت الشاشة لتُبلغ المستخدم عن انتهاء مهلة وضع عدم النشاط.
يقترب. يتيح لك الاتصال بالرقم
setScreenBright(true)
بدلاً من ذلك ضبط الشاشة على مستوى سطوعها المعتاد.
لمزيد من المعلومات، اطّلِع على مستندات "DreamService
".
الشاشات الثانوية
يسمح Android الآن لتطبيقك بعرض محتوى فريد على الشاشات الإضافية المتصلة
إلى جهاز المستخدم عبر اتصال سلكي أو شبكة Wi-Fi.
لإنشاء محتوى فريد لشاشة ثانوية، يمكنك توسيع فئة Presentation
وتنفيذ طلب إعادة الاتصال onCreate()
. ضمن
onCreate()
، حدِّد واجهة المستخدم للشاشة الثانوية
من خلال الاتصال بالرقم setContentView()
.
كإضافة لفئة Dialog
، توفّر الفئة Presentation
المنطقة التي يمكن أن يعرض فيها تطبيقك واجهة مستخدم فريدة على
الشاشة الثانوية.
لرصد الشاشات الثانوية التي يمكنك عرض Presentation
عليها،
استخدِم واجهات برمجة التطبيقات DisplayManager
أو MediaRouter
. تسمح لك واجهات برمجة التطبيقات DisplayManager
بتعداد
شاشات متعددة قد تكون متصلة في آنٍ واحد، عليك عادةً استخدام MediaRouter
بدلاً من ذلك للوصول سريعًا إلى شاشة العرض التلقائية للنظام
وعروضك التقديمية.
للحصول على الشاشة التلقائية للعرض التقديمي، يُرجى الاتصال بالرقم MediaRouter.getSelectedRoute()
وتمريره.
ROUTE_TYPE_LIVE_VIDEO
يعرض هذا الإجراء عنصر MediaRouter.RouteInfo
يصف مسار النظام المحدّد حاليًا
لعروض الفيديو. إذا لم يكن MediaRouter.RouteInfo
فارغًا، اتّصل
getPresentationDisplay()
للحصول على Display
الذي يمثّل الشاشة المتصلة.
يمكنك بعد ذلك عرض العرض التقديمي من خلال تمرير كائن Display
إلى دالة إنشاء لفئة Presentation
. سيظهر العرض التقديمي الآن
على الشاشة الثانوية.
لرصد وقت الاتصال بشاشة جديدة أثناء التشغيل، أنشئ مثيلًا من MediaRouter.SimpleCallback
تُنفِّذ فيه طريقة طلب معاودة الاتصال onRoutePresentationDisplayChanged()
التي سيستدعيها النظام عند اتصال شاشة عرض جديدة. ثم سجِّل MediaRouter.SimpleCallback
من خلال تمريره إلى MediaRouter.addCallback()
مع نوع المسار ROUTE_TYPE_LIVE_VIDEO
. عند تلقّي مكالمة على الرقم
onRoutePresentationDisplayChanged()
، ما عليك سوى الاتصال بالرقم MediaRouter.getSelectedRoute()
كما هو موضّح أعلاه.
لتحسين واجهة المستخدم في Presentation
بشكلٍ أكبر لتناسب
الشاشات الثانوية، يمكنك تطبيق
مظهر مختلف من خلال تحديد السمة android:presentationTheme
في <style>
التي
طبّقتها على تطبيقك أو نشاطك.
تذكَّر أنّ الشاشات المتصلة بجهاز المستخدم غالبًا ما تكون أكبر حجمًا و
من المحتمل أن تكون كثافة شاشته مختلفة. وبما أنّ خصائص الشاشة قد تختلف، عليك
توفير موارد محسّنة خصيصًا لهذه الشاشات الأكبر حجمًا. إذا كنت بحاجة
لطلب موارد إضافية من "Presentation
"، يمكنك الاتصال بالرقم getContext()
.getResources()
للحصول على العنصر Resources
المتوافق مع الشاشة. يقدّم ذلك
الموارد المناسبة من تطبيقك والتي تناسب بشكل أفضل
حجم الشاشة الثانوية وكثافتها.
لمزيد من المعلومات وبعض عيّنات الرموز البرمجية، اطّلِع على Presentation
مستندات الفئة.
التطبيقات المصغّرة لشاشة القفل
يتيح نظام التشغيل Android للمستخدمين الآن إضافة تطبيقات مصغّرة إلى شاشة القفل. لإتاحة تطبيقك المصغّر للاستخدام على
شاشة القفل، أضِف سمة android:widgetCategory
إلى ملف XML الذي يحدِّد AppWidgetProviderInfo
. تتيح هذه السمة استخدام قيمتَين: home_screen
وkeyguard
. يتم ضبط السمة تلقائيًا على home_screen
كي يتمكّن المستخدمون من إضافة
التطبيق المصغَّر إلى الشاشة الرئيسية. إذا أردت أن تكون أداة تطبيقك متاحة أيضًا في وضع القفل
الشاشة، أضف قيمة keyguard
:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" ... android:widgetCategory="keyguard|home_screen"> </appwidget-provider>
يجب أيضًا تحديد تنسيق أولي لتطبيقك المصغّر عند عرضه على شاشة القفل باستخدام سمة android:initialKeyguardLayout
. ويعمل هذا الإجراء بالطريقة نفسها التي يعمل بها android:initialLayout
، من حيث أنّه يقدّم
تنسيقًا يمكن أن يظهر على الفور إلى أن يتمّ إعداد تطبيقك المصغّر ويصبح بإمكانه تعديل
التنسيق.
لمزيد من المعلومات حول إنشاء تطبيقات مصغّرة لشاشة القفل، بما في ذلك تحديد حجم التطبيق المصغّر بشكلٍ سليم عند عرضه على شاشة القفل، اطّلِع على دليل التطبيقات المصغّرة.
عدّة مستخدمين
يتيح نظام التشغيل Android الآن إنشاء مساحات متعددة للمستخدمين على الأجهزة القابلة للمشاركة، مثل الأجهزة اللوحية. كل مستخدم في الجهاز لديه مجموعة خاصة من الحسابات والتطبيقات وإعدادات النظام والملفات وأي بيانات أخرى البيانات المرتبطة بالمستخدم.
بصفتك مطوّر تطبيقات، ليس عليك اتّخاذ أي إجراء مختلف لكي يعمل تطبيقك بشكلٍ سليم مع مستخدمين متعدّدين على جهاز واحد. بغض النظر عن عدد المستخدمين على الجهاز، يتم الاحتفاظ ببيانات المستخدم المحدّد التي يحفظها تطبيقك بشكل منفصل عن البيانات التي يحفظها التطبيق للمستخدمين الآخرين. يتتبع النظام بيانات المستخدم التي تنتمي إلى عملية المستخدم التي كان تطبيقك قيد التشغيل ويتيح له الوصول إلى بيانات هذا المستخدم فقط ولا يسمح له الوصول إلى بيانات المستخدمين الآخرين.
حفظ البيانات في بيئة متعددة المستخدمين
عندما يحفظ تطبيقك الإعدادات المفضّلة للمستخدم أو يُنشئ قاعدة بيانات أو يكتب ملفًا إلى المستخدم مساحة تخزين داخلية أو خارجية، لا يمكن الوصول إلى هذه البيانات إلا أثناء تشغيلها بصفتك هذا المستخدم.
للتأكّد من أنّ تطبيقك يعمل بشكل صحيح في بيئة متعددة المستخدمين، لا تُشِر إلى دليل التطبيق الداخلي أو موقع وحدة التخزين الخارجية باستخدام مسارات غير قابلة للتغيير في البرنامج، وبدلاً من ذلك لواجهات برمجة التطبيقات المناسبة:
- للوصول إلى وحدة التخزين الداخلية، استخدِم
getFilesDir()
أوgetCacheDir()
أوopenFileOutput()
. - للوصول إلى مساحة التخزين الخارجية، استخدِم
getExternalFilesDir()
أوgetExternalStoragePublicDirectory()
.
بغض النظر عن أي من واجهات برمجة التطبيقات هذه تستخدمها لحفظ البيانات لمستخدم معين، فلن يتم يمكن الوصول إليها أثناء تشغيلها كمستخدم مختلف. من وجهة نظر تطبيقك، يعمل كل مستخدم على جهاز منفصل تمامًا.
تحديد هوية المستخدمين في بيئة متعددة المستخدمين
إذا كان تطبيقك يريد تحديد مستخدمين فريدين، مثلاً لجمع إحصاءات أو إنشاء حساب آخر
من Google، فيجب عليك اتباع الممارسات الموصى بها لتحديد
عمليات التثبيت الفريدة. من خلال إنشاء UUID
جديد عند بدء تشغيل تطبيقك للمرة
الأولى، يمكنك التأكّد من الحصول على معرّف فريد لتتبُّع كل مستخدم، بغض النظر عن عدد
المستخدمين الذين ثبَّتوا تطبيقك على جهاز واحد. بدلاً من ذلك، يمكنك حفظ رمز مميّز محلي تم استرجاعه من
خادمك أو استخدام معرّف التسجيلات المقدَّم من Google Cloud Messaging.
يُرجى العِلم أنّه إذا طلب تطبيقك أحد معرّفات الأجهزة (مثل عنوان MAC لشبكة WiFi
أو رقم SERIAL
)، سيقدّم القيمة نفسها لكل
مستخدم لأنّ هذه المعرّفات مرتبطة بالأجهزة وليس بالمستخدم. ناهيك عن الآخر
المشكلات التي تقدمها هذه المعرّفات كما تمت مناقشته في مقالة تحديد
مشاركة المدونة عن عمليات تثبيت التطبيقات
إعدادات عامة جديدة
تم تعديل إعدادات النظام لإتاحة العديد من المستخدمين مع إضافة Settings.Global
. تتشابه هذه المجموعة من الإعدادات مع إعدادات Settings.Secure
لأنّها للقراءة فقط، ولكنّها تسري بشكل عام على
جميع مساحات المستخدمين على الجهاز.
تم نقل العديد من الإعدادات الحالية إلى هنا من Settings.System
أو Settings.Secure
. إذا كان تطبيقك
يجري حاليًا تغييرات على الإعدادات المحدّدة سابقًا في Settings.System
(مثل AIRPLANE_MODE_ON
)، من المفترض أن يتوقف
تطبيقك عن إجراء ذلك على جهاز يعمل بنظام التشغيل Android 4.2 أو إصدار أحدث إذا تم نقل تلك الإعدادات
إلى Settings.Global
. يمكنك مواصلة قراءة الإعدادات التي تم وضعها في Settings.Global
، ولكن بما أنّ الإعدادات لم تعُد آمنة
للتطبيقات لتغييرها، ستتعذّر محاولة إجراء ذلك بدون إشعار وسيُسجِّل النظام تحذيرًا في
سجلّ النظام عند تشغيل تطبيقك على Android 4.2 أو الإصدارات الأحدث.
إتاحة التنسيق من اليمين إلى اليسار
يوفر Android الآن العديد من واجهات برمجة التطبيقات التي تتيح لك إنشاء واجهات مستخدم بطريقة رشيقة تغيير اتجاه التنسيق لإتاحة اللغات التي تستخدم واجهات المستخدم من اليمين إلى اليسار (RTL) وميزة القراءة "، مثل العربية والعبرية.
لبدء إتاحة تنسيقات RTL في تطبيقك، اضبط السمة android:supportsRtl
على العنصر <application>
في ملف البيان
واضبطها على “true"
. بعد تفعيل هذا الخيار، سيفعّل النظام واجهات برمجة تطبيقات RTL المختلفة لعرض تطبيقك بتنسيقات RTL. على سبيل المثال، سيعرض شريط الإجراءات الرمز والعنوان
على الجانب الأيمن وأزرار الإجراءات على اليسار، وأي تخطيطات قمت بإنشائها باستخدام
سيتم أيضًا إلغاء صفوف View
التي يوفّرها إطار العمل.
إذا كنت بحاجة إلى تحسين مظهر تطبيقك بشكل أكبر عند عرضه بتنسيق RTL، هناك مستويان أساسيان من التحسين:
- تحويل خصائص التنسيق لليسار واليمين إلى تنسيق موجّه نحو البداية والنهاية
المواقع.
على سبيل المثال، استخدِم
android:layout_marginStart
. بدلاً منandroid:layout_marginLeft
وandroid:layout_marginEnd
بدلاً منandroid:layout_marginRight
.توفّر فئة
RelativeLayout
أيضًا سمات التنسيق المقابلة لاستبدال مواضع اليسار/اليمين، مثلandroid:layout_alignParentStart
بدلاً منandroid:layout_alignParentLeft
وandroid:layout_toStartOf
بدلاً منandroid:layout_toLeftOf
. - أو لتقديم تحسين كامل لتخطيطات من اليمين إلى اليسار، يمكنك توفير نماذج منفصلة تمامًا
تنسيق باستخدام مؤهِّل موارد
ldrtl
(يشيرldrtl
إلى segmentation-direction-right-to-left}). على سبيل المثال، يمكنك حفظ ملفات التنسيق الافتراضي فيres/layout/
وتنسيقات بتنسيق RTL محسَّنة فيres/layout-ldrtl/
يُعدّ مؤهِّل
ldrtl
مناسبًا للموارد القابلة للرسم ليكون بإمكانك تقديم الرسومات الموجّهة في الاتجاه المقابل لاتجاه القراءة.
تتوفّر واجهات برمجة تطبيقات أخرى متنوعة في إطار العمل لتتوافق مع تنسيقات RTL، مثل View
لتطبيق السلوكيات المناسبة للعروض المخصّصة وConfiguration
لطلب معلومات عن اتجاه التنسيق الحالي.
ملاحظة: إذا كنت تستخدم قاعدة بيانات SQlite وكان لديك جداول أو أسماء أعمدة من النوع "رقم فقط"، عليك الحذر عند استخدام String.format(String, Object...)
لأنّ ذلك قد يؤدي إلى ظهور أخطاء عند تحويل الأرقام إلى نظائرها باللغة العربية إذا تم ضبط إعدادات جهازك على اللغة العربية.
يجب استخدام String.format(Locale,String,Object...)
لضمان
الحفاظ على الأرقام بترميز ASCII. استخدِم أيضًا String.format("%d", int)
بدلاً من استخدام
String.valueOf(int)
لتنسيق الأرقام.
الأجزاء المتداخلة
يمكنك الآن تضمين أقسام داخل أقسام. يكون ذلك مفيدًا في مجموعة متنوعة من الحالات التي تريد فيها وضع مكونات واجهة مستخدم ديناميكية وقابلة لإعادة الاستخدام في عنصر واجهة مستخدم هو نفسه ديناميكي وقابل لإعادة الاستخدام. على سبيل المثال، إذا كنت تستخدم ViewPager
لإنشاء أجزاء بسرعة
لليمين واليسار وتستهلك معظم مساحة الشاشة، يمكنك
والآن أدرِج أجزاءً في كل صفحة تجزئة.
لدمج جزء، ما عليك سوى استدعاء getChildFragmentManager()
على
Fragment
الذي تريد إضافة جزء فيه. يؤدي هذا الإجراء إلى عرض FragmentManager
يمكنك استخدامه كما تفعل عادةً من نشاط المستوى الأعلى.
لإنشاء معاملات مجزأة. على سبيل المثال، إليك بعض التعليمات البرمجية التي تضيف كسرًا من داخل
فئة Fragment
حالية:
Kotlin
val videoFragment = VideoPlayerFragment() childFragmentManager.beginTransaction().apply { add(R.id.video_fragment, videoFragment) commit() }
Java
Fragment videoFragment = new VideoPlayerFragment(); FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); transaction.add(R.id.video_fragment, videoFragment).commit();
من داخل جزء مدمج، يمكنك الحصول على إشارة إلى الجزء الرئيسي من خلال استدعاء
getParentFragment()
تتيح "مكتبة Android Support Library" الآن أيضًا استخدام الأجزاء المُدمجة، ما يتيح لك تنفيذ تصاميم الأجزاء المُدمجة على الإصدار 1.6 من Android والإصدارات الأحدث.
ملاحظة: لا يمكنك تضخيم تنسيق إلى جزء عندما يحتوي هذا التنسيق على <fragment>
. لا يتم دعم الأجزاء المتداخلة إلا عند إضافتها إلى
بشكل ديناميكي.
Renderscript
تم تحسين وظيفة الحساب في Renderscript من خلال الميزات التالية:
- العناصر الأساسية للنص
يمكنك استخدام العناصر الأساسية المضمّنة في النص البرمجي في Renderscript والتي تنفذ العمليات المشتركة لك مثل:
Blends
Blur
Color matrix
3x3 convolve
5x5 convolve
Per-channel lookup table
Converting an Android YUV buffer to RGB
لاستخدام سمة أساسية للنص البرمجي، استخدِم الطريقة الثابتة
create()
لكل سمة أساسية لإنشاء مثيل للنص البرمجي. بعد ذلك، يمكنك استدعاء طرقset()
المتاحة لكل نص برمجي أساسي لضبط أي مدخلات وخيارات ضرورية. وأخيرًا، اختَر "forEach()
" لتنفيذ النص البرمجي.- مجموعات النصوص البرمجية
-
تتيح لك علامات
ScriptGroup
ربط سلسلة Renderscript ذات الصلة معًا. النصوص البرمجية وتنفيذها باستدعاء واحد.استخدِم
ScriptGroup.Builder
لإضافة جميع النصوص البرمجية إلى المجموعة من خلال استدعاءaddKernel()
. بمجرد وإضافة جميع النصوص البرمجية، وأنشئ الاتصالات بين النصوص البرمجية من خلال الاتصال بـaddConnection()
. عند الانتهاء من إضافة عمليات الربط، اتصل بالرقمcreate()
لإنشاء مجموعة النصوص البرمجية. قبل تنفيذ مجموعة النصوص البرمجية، حدِّد المُدخل.Allocation
والنص البرمجي الأولي المطلوب تشغيله معsetInput(Script.KernelID, Allocation)
وتقديم المخرجاتAllocation
حيث تتم كتابة النتيجة إلى النص البرمجي النهائي إلى تم تنفيذها باستخدامsetOutput()
. أخيرًا، اتصلexecute()
لتشغيل مجموعة النصوص البرمجية. - نص الفلتر
-
تحدد عوامل التصفية القيود المفروضة على واجهات برمجة تطبيقات Renderscript الحالية التي تسمح بتشغيل التعليمة البرمجية الناتجة باستخدام مجموعة متنوعة من المعالجات (وحدات المعالجة المركزية (CPU) ووحدة معالجة الرسومات (GPU) ووحدة معالجة الإعدادات (DSP). لإنشاء ملفات filterscript، عليك إنشاء
.fs
. ملفات بدلاً من.rs
ملف، وتحديد#pragma rs_fp_relaxed
إلى إعلام وقت تشغيل Renderscript بأن النصوص البرمجية لا تتطلب دقة النقطة العائمة الصارمة من الإصدار IEEE 754-2008. وتتيح هذه الدقة انحدار صفر إلى الصفر مع الأواني المتنقلة وتقريبها من الصفر. بالإضافة إلى ذلك، يجب ألا تستخدم ملفّات برمجة Filterscript أنواعًا مضمّنة بسعة 32 بت، ويجب تحديد وظيفة جذر مخصّصة باستخدام سمة__attribute__((kernel))
لأنّ Filterscript لا يتوافق مع المؤشرات التي يحدّدها التوقيع التلقائي لوظيفةroot()
.
ملاحظة: على الرغم من توفّر دعم Filterscript في المنصة، سيكون دعم المطوّرين متاحًا في الإصدار 21.0.1 من "أدوات حِزم تطوير البرامج (SDK)".
للحصول على عرض تفصيلي لجميع تغييرات واجهة برمجة التطبيقات في Android 4.2، يمكن الاطّلاع على تقرير اختلافات واجهة برمجة التطبيقات