واجهات برمجة التطبيقات لنظام التشغيل Android 4.2

مستوى واجهة برمجة التطبيقات: 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 الآن إنشاء مساحات متعددة للمستخدمين على الأجهزة القابلة للمشاركة، مثل الأجهزة اللوحية. كل مستخدم في الجهاز لديه مجموعة خاصة من الحسابات والتطبيقات وإعدادات النظام والملفات وأي بيانات أخرى البيانات المرتبطة بالمستخدم.

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

حفظ البيانات في بيئة متعددة المستخدمين

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

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

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

تحديد هوية المستخدمين في بيئة متعددة المستخدمين

إذا كان تطبيقك يريد تحديد مستخدمين فريدين، مثلاً لجمع إحصاءات أو إنشاء حساب آخر من 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، هناك مستويان أساسيان من التحسين:

  1. تحويل خصائص التنسيق لليسار واليمين إلى تنسيق موجّه نحو البداية والنهاية المواقع.

    على سبيل المثال، استخدِم 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.

  2. أو لتقديم تحسين كامل لتخطيطات من اليمين إلى اليسار، يمكنك توفير نماذج منفصلة تمامًا تنسيق باستخدام مؤهِّل موارد 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 والتي تنفذ العمليات المشتركة لك مثل:

لاستخدام سمة أساسية للنص البرمجي، استخدِم الطريقة الثابتة 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، يمكن الاطّلاع على تقرير اختلافات واجهة برمجة التطبيقات