التغييرات في السلوك: التطبيقات التي تستهدف الإصدار 12 من نظام التشغيل Android

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

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

تجربة المستخدم

الإشعارات المُخصَّصة

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

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

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

يعرض الرسم التوضيحي التالي إشعارًا مخصّصًا في النموذج العادي:

توضّح الأمثلة التالية كيفية عرض الإشعارات المخصّصة في إعلان مصغّر. وحالية موسّعة:

يؤثر التغيير في Android 12 على التطبيقات التي تحدِّد فئات فرعية مخصَّصة Notification.Style، أو التي تستخدم طُرق Notification.Builder setCustomContentView(RemoteViews), setCustomBigContentView(RemoteViews), وsetCustomHeadsUpContentView(RemoteViews).

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

  1. تفعيل تغيير الإشعارات المخصّصة:

    1. يُرجى تغيير targetSdkVersion لتطبيقك إلى S لتفعيل السلوك الجديد.
    2. إعادة التحويل البرمجي.
    3. ثبِّت تطبيقك على جهاز أو محاكي يعمل بنظام التشغيل Android 12.
  2. اختبار جميع الإشعارات التي تستخدم طرق عرض مخصّصة، والتأكد من أنّها تظهر بمظهرك نتوقعه في الظل. أثناء الاختبار، ضع هذه الاعتبارات في الاعتبار وإجراء التعديلات اللازمة:

    • تم تغيير أبعاد الملفات الشخصية المخصّصة. بشكل عام، يتناسب الارتفاع التي تتيحها الإشعارات المخصّصة أقل من أي وقت مضى. في الجدول المصغّر جديد، انخفض الحد الأقصى لارتفاع المحتوى المخصّص من 106 بكسل مستقل الكثافة (dp). إلى 48 بكسل مستقل الكثافة (dp). كما أن هناك مساحة أفقية أقل.

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

    • وللتأكد من أن "إنذار الانتباه أثناء السير" الحالة كما تتوقع، فلا تنس لزيادة أهمية قناة الإشعارات إلى "عالية" (ينبثق على الشاشة).

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

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

يمكنك أيضًا يدويًا إثبات روابط التطبيق لاختبار موثوقية نماذجك.

تحسينات على السلوك في ميزة "نافذة ضمن النافذة"

يقدّم Android 12 تحسينات على سلوك وضع "نافذة ضمن النافذة" (PiP). وإدخال تحسينات تجميلية مقترَحة على الصور المتحركة في كلا الإيماءة التنقل والتنقل المستند إلى العناصر.

الاطّلاع على ميزة نافذة ضمن النافذة للتحسينات للمزيد من المعلومات.

إعادة تصميم Toast

في Android 12، كان عرض الإشعار المحمص وإعادة تصميمه. تقتصر الإشعارات المحمصة الآن على سطرين من النص وتعرض التطبيق الرمز بجانب النص.

صورة لجهاز Android تعرض قراءة لنافذة منبثقة نطاق وصول
            "جارٍ إرسال الرسالة" بجانب رمز التطبيق

يمكنك الاطّلاع على نظرة عامة على تطبيقات Toasts لمعرفة مزيد من التفاصيل.

الأمان والخصوصية

الموقع الجغرافي التقريبي

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

ملفات تعريف ارتباط SameSite الحديثة في WebView

يستنِد مكوّن WebView في نظام التشغيل Android إلى Chromium هو المشروع المفتوح المصدر الذي يعمل على تشغيل متصفّح Chrome من Google تم إطلاق Chromium تغييرات على طريقة التعامل مع ملفات تعريف الارتباط التابعة لجهات خارجية لتوفير مزيد من الأمان الخصوصية وتوفير مزيد من الشفافية والتحكم للمستخدمين. بدءًا من نظام التشغيل Android 12، يتم تضمين هذه التغييرات أيضًا في WebView عند استهداف التطبيقات Android 12 (المستوى 31) أو إصدار أحدث.

تحدد السمة SameSite لملف تعريف ارتباط ما إذا كان يمكن إرساله مع أي أو طلبات المواقع نفسها فقط. الإجراءات التالية لحماية الخصوصية تؤدي التغييرات إلى تحسين المعالجة التلقائية لملفات تعريف الارتباط التابعة لجهات خارجية والمساعدة في حماية ضد المشاركة غير المقصودة على مواقع إلكترونية متعددة:

  • يتم التعامل مع ملفات تعريف الارتباط التي لا تتضمّن سمة SameSite على أنّها SameSite=Lax.
  • إنّ ملفات تعريف الارتباط التي تتضمّن SameSite=None يجب أن تحدّد أيضًا السمة Secure، ما يعني فتلك تتطلب سياقًا آمنًا ويجب إرسالها عبر HTTPS.
  • يتم الآن التعامل مع الروابط بين إصدارَي HTTP وHTTPS من أحد المواقع الإلكترونية على أنّها روابط تؤدي إلى مواقع إلكترونية متعددة بحيث لا يتم إرسال ملفات تعريف الارتباط ما لم يتم وضع علامة عليها بشكل مناسب SameSite=None; Secure

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

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

اختبار سلوكيات SameSite في تطبيقك

إذا كان تطبيقك يستخدم WebView، أو إذا كنت تدير موقعًا إلكترونيًا أو خدمة تستخدم لملفات تعريف الارتباط، ننصحك باختبار العمليات على Android 12 WebView. وإذا واجهتك مشاكل، قد تحتاج إلى تعديل ملفات تعريف الارتباط لدعم واجهة برمجة التطبيقات الجديدة. سلوكيات SameSite.

راقب المشاكل في عمليات تسجيل الدخول والمحتوى المضمَّن، بالإضافة إلى مسارات تسجيل الدخول وعمليات الشراء الأخرى حيث يبدأ المستخدم في عملية دخول غير آمنة وعمليات النقل إلى صفحة آمنة.

لاختبار تطبيق باستخدام WebView، يجب تفعيل سلوكيات SameSite الجديدة تطبيقًا تريد اختباره من خلال إكمال إحدى الخطوتَين التاليتَين:

  • تفعيل سلوكيات SameSite يدويًا على الجهاز الاختباري من خلال تفعيل علامة واجهة المستخدم أو إيقافها webview-enable-modern-cookie-same-site في أدوات مطوّري البرامج في WebView.

    تتيح لك هذه الطريقة إجراء الاختبارات على أي جهاز يعمل بالإصدار Android 5.0 (المستوى 21 من واجهة برمجة التطبيقات). أو إصدار أحدث، بما في ذلك الإصدار 12 من نظام التشغيل Android والإصدار 89.0.4385.0 من WebView أو أعلى.

  • عليك تجميع تطبيقك لاستهداف الإصدار Android 12 (المستوى 31 من واجهة برمجة التطبيقات) بحلول targetSdkVersion.

    وفي حال اتّباع هذه الطريقة، يجب استخدام جهاز يعمل نظام التشغيل Android 12.

للحصول على معلومات حول تصحيح الأخطاء عن بُعد في WebView على Android، يُرجى الاطّلاع على البدء. باستخدام ميزة "تصحيح الأخطاء عن بُعد" في أجهزة Android

مراجع أخرى

لمزيد من المعلومات حول السلوكيات الحديثة لـ SameSite وطرحها في Chrome و WebView، تفضل بزيارة تحديثات Chromium SameSite . في حال العثور على خطأ في WebView أو Chromium، يمكنك الإبلاغ عنه في مشكلة Chromium العامة .

أجهزة استشعار الحركة محدودة المعدّل

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

مزيد من المعلومات حول أداة الاستشعار تقييد المعدّل

إسبات التطبيق

توسيع نطاق Android 12 بعد إعادة ضبط الأذونات تلقائيًا السلوك الذي تم طرحه في نظام التشغيل Android 11 (المستوى 30) إذا كان تطبيقك يستهدف الإصدار 12 من نظام التشغيل Android ولا يتفاعل المستخدم مع تطبيقك لبضعة يعيد النظام ضبط أي أذونات ممنوحة ويضع تطبيقك في إسبات.

مزيد من المعلومات في دليل التطبيقات إسبات.

بيان تحديد المصدر في تدقيق الوصول إلى البيانات

تسمح لك واجهة برمجة تطبيقات تدقيق الوصول إلى البيانات، التي تم تقديمها في نظام التشغيل Android 11 (المستوى 30)، لك، من أجل إنشاء إحالة العلامات استنادًا إلى حالات استخدام التطبيق. وهذه العلامات تسهل عليك تحديد الجزء الذي أنّ تطبيقك ينفِّذ نوعًا معيّنًا من الوصول إلى البيانات

إذا كان تطبيقك يستهدف الإصدار 12 من نظام التشغيل Android أو إصدارًا أحدث، عليك تقديم بيان عن ما يلي: علامات تحديد المصدر في ملف البيان لتطبيقك.

قيد النسخ الاحتياطي عبر ADB

للمساعدة في حماية بيانات التطبيقات الخاصة، يغيِّر نظام Android 12 السلوك التلقائي الأمر adb backup. بالنسبة إلى التطبيقات التي تستهدف الإصدار 12 من نظام التشغيل Android (المستوى 31) أو الإصدارات الأحدث، يجب اتّباع الخطوات التالية: عندما يشغِّل المستخدم الأمر adb backup، يتم استبعاد بيانات التطبيق من أي تطبيق آخر بيانات النظام التي يتم تصديرها من الجهاز.

إذا كانت مهام سير عمل الاختبار أو التطوير تعتمد على بيانات التطبيق باستخدام "adb backup"، يمكنك الآن تفعيل تصدير بيانات تطبيقك من خلال ضبط android:debuggable إلى true في ملف البيان لتطبيقك.

تصدير المكوّنات بشكل أكثر أمانًا

إذا كان تطبيقك يستهدف الإصدار 12 من نظام التشغيل Android أو إصدارًا أحدث ويحتوي على أنشطة أو الخدمات أو البث المستلِمون الذين يستخدمون الهدف هذه الفلاتر، يجب عليك صراحةً الإعلان عن android:exported السمة لمكونات التطبيق هذه.

إذا كان مكوِّن التطبيق يتضمن تم ضبط الفئة LAUNCHER. android:exported إلى true. في معظم الحالات الأخرى، اضبط android:exported على false

يعرض مقتطف الرمز التالي مثالاً على خدمة تتضمّن هدفًا. فلتر الذي تم ضبط سمة android:exported على false:

<service android:name="com.example.app.backgroundService"
         android:exported="false">
    <intent-filter>
        <action android:name="com.example.app.START_BACKGROUND" />
    </intent-filter>
</service>

الرسائل في "استوديو Android"

إذا كان تطبيقك يحتوي على نشاط أو خدمة أو مستقبِل بث يستخدم فلاتر الأهداف ولكنها لا تتضمّن التعريف android:exported. التحذير التالي تظهر الرسائل بناءً على إصدار "استوديو Android" الذي تستخدمه:

إصدار Android Studio 2020.3.1 Canary 11 أو إصدار أحدث

تظهر الرسائل التالية:

  1. يظهر تحذير أداة Lint التالي في ملف البيان:

    When using intent filters, please specify android:exported as well
    
  2. عند محاولة تجميع تطبيقك، تظهر رسالة خطأ الإصدار التالية يظهر:

    Manifest merger failed : Apps targeting Android 12 and higher are required \
    to specify an explicit value for android:exported when the corresponding \
    component has an intent filter defined.
    
إصدارات قديمة من "استوديو Android"

إذا حاولت تثبيت تطبيق Logcat تعرض رسالة الخطأ التالية:

Installation did not succeed.
The application could not be installed: INSTALL_FAILED_VERIFICATION_FAILURE
List of apks:
[0] '.../build/outputs/apk/debug/app-debug.apk'
Installation failed due to: 'null'

قابلية التغيّر في عناصر واجهة المستخدم في انتظار المراجعة

إذا كان تطبيقك يستهدف Android 12، عليك تحديد قابلية التغيّر في كل كائن PendingIntent عمليات إنشاء التطبيقات. يؤدي هذا الشرط الإضافي إلى تحسين أمان تطبيقك.

اختبار التغيير المعلَّق لقابلية التغيّر في النية بالشراء

لتحديد ما إذا كان تطبيقك لا يتضمّن بيانات قابلية التغيّر، ابحث عن اتباع تحذير Lint في "استوديو Android":

Warning: Missing PendingIntent mutability flag [UnspecifiedImmutableFlag]

عمليات الإطلاق غير الآمنة حسب نية العميل

لتحسين مستوى أمان النظام الأساسي، يوفّر Android 12 والإصدارات الأحدث تصحيح الأخطاء التي تكتشف عمليات التشغيل غير الآمنة النوايا. فعندما كشَف النظام إطلاقًا غير آمن حدوث انتهاك شديد للوضع.

الأداء

قيود تشغيل الخدمات التي تعمل في المقدّمة

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

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

إذن استخدام المنبّهات المحدَّدة الوقت

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

للحصول على إذن الوصول الخاص إلى هذا التطبيق، يمكنك طلب SCHEDULE_EXACT_ALARM إذن في البيان.

يجب استخدام المنبّهات المحدَّدة الوقت فقط مع الميزات الموجّهة للمستخدمين. يمكنك الاطّلاع على مزيد من المعلومات عن سياسة حالات الاستخدام المقبولة لتحديد الخاص بك.

إيقاف تغيير السلوك

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

  • في شاشة إعداد خيارات المطوّرين، اختَر التوافق مع التطبيقات. التغييرات على الشاشة التي تظهر، انقر على اسم التطبيق، ثم أوقِف الخيار REQUIRE_EXACT_ALARM_Permission.
  • في نافذة طرفية على جهاز التطوير، شغِّل الأمر التالي:

    adb shell am compat disable REQUIRE_EXACT_ALARM_PERMISSION PACKAGE_NAME
    

قيود متعلقة بالإشعارات على الترامبولين

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

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

عندما يحاول تطبيقك بدء نشاط من خدمة أو مستقبِل بث الذي يعمل كترامبولين للإشعار، فإن النظام يمنع النشاط من وتظهر الرسالة التالية في Logcat:

Indirect notification activity start (trampoline) from PACKAGE_NAME, \
this should be avoided for performance reasons.

تحديد مكونات التطبيق التي تعمل كترامبولين للإشعار

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

adb shell dumpsys activity service \
  com.android.systemui/.dump.SystemUIAuxiliaryDumpService

يتضمن قسم من النتائج النص "NotifInteractionLog". هذا القسم ويحتوي على المعلومات اللازمة لتحديد المكون الذي يبدأ نتيجة النقر على الإشعار.

تحديث تطبيقك

إذا بدأ تطبيقك نشاطًا من خدمة أو مستقبِل بث يعمل كنشاط إشعار ترامبولين، أكمل خطوات النقل التالية:

  1. أنشئ كائن PendingIntent بالنشاط الذي يظهر للمستخدمين بعد أن ينقروا على .
  2. استخدِم كائن PendingIntent الذي أنشأته في الخطوة السابقة. من إنشاء

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

تبديل السلوك

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

الاحتفاظ بنسخة احتياطية والاستعادة

هناك تغييرات على كيفية عمل الاحتفاظ بنسخة احتياطية والاستعادة في التطبيقات التي تعمل على Android 12 (المستوى 31) هناك نموذجان لميزة "الاحتفاظ بنسخة احتياطية من البيانات واستعادتها في جهاز Android":

  • النُسخ الاحتياطية السحابية: يتم تخزين بيانات المستخدم في Google Drive لكي ويمكن استعادتها لاحقًا على ذلك الجهاز أو على جهاز جديد.
  • عمليات النقل من جهاز إلى جهاز (D2D): يتم إرسال بيانات المستخدمين مباشرةً إلى جهاز المستخدم الجديد من جهازه القديم، على سبيل المثال باستخدام كابل.

لمزيد من المعلومات حول كيفية الاحتفاظ بنسخة احتياطية من البيانات واستعادتها، يُرجى الاطّلاع على مقالة الاحتفاظ بنسخة احتياطية من بيانات المستخدم. باستخدام ميزة "التحميل التلقائي" والاحتفاظ بنسخة احتياطية من أزواج المفتاح/القيمة باستخدام خدمة Android Backup Service:

التغييرات في وظائف النقل من جهاز إلى جهاز آخر

بالنسبة إلى التطبيقات التي تعمل على نظام التشغيل Android 12 والإصدارات الأحدث التي تستهدفه:

  • تحديد قواعد التضمين والاستبعاد باستخدام XML على عمليات النقل من D2D، إلا أنها لا تزال يؤثر في النسخ الاحتياطي والاستعادة المستند إلى السحابة الإلكترونية (مثل النُسخ الاحتياطية على Google Drive). إلى قواعد لعمليات النقل من جهاز إلى آخر، فيجب استخدام الإعدادات الجديدة التي في القسم التالي.

  • على أجهزة بعض الشركات المصنِّعة للأجهزة، يؤدي تحديد يوقف تطبيق "android:allowBackup="false"" النُسخ الاحتياطية في Google Drive، ولكن لا توقِف عمليات النقل من جهاز إلى آخر للتطبيق.

تنسيق "تضمين" و"استبعاد" الجديد

تستخدم التطبيقات التي تعمل على نظام التشغيل Android 12 والإصدارات الأحدث لتنسيق مختلف في تهيئة XML. يصنع هذا التنسيق فرقًا بين الاحتفاظ بنسخة احتياطية من Google Drive ونقل البيانات من جهاز إلى آخر بشكل صريح من خلال طلب ما يلي: تحديد تضمين القواعد واستبعادها بشكل منفصل للنسخ الاحتياطية على السحابة الإلكترونية ومن أجل الأجهزة الثنائية الأبعاد النقل.

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

تغييرات تنسيق XML

في ما يلي التنسيق المستخدَم لضبط إعدادات الاحتفاظ بنسخة احتياطية من البيانات واستعادتها في نظام Android. 11 والإصدارات الأدنى:

<full-backup-content>
    <include domain=["file" | "database" | "sharedpref" | "external" |
                     "root"] path="string"
    requireFlags=["clientSideEncryption" | "deviceToDeviceTransfer"] />
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                     "root"] path="string" />
</full-backup-content>

يوضح ما يلي التغييرات التي تم إجراؤها على التنسيق بالخط الغامق.

<data-extraction-rules>
  <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]>
    ...
    <include domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
  </cloud-backup>
  <device-transfer>
    ...
    <include domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
  </device-transfer>
</data-extraction-rules>

لمزيد من المعلومات، يُرجى الاطّلاع على قسم المراسلات في دليل الاحتفاظ بنسخة احتياطية من بيانات المستخدم باستخدام التحميل التلقائي.

علامة البيان للتطبيقات

وجِّه تطبيقاتك إلى تهيئة XML الجديدة باستخدام السمة android:dataExtractionRules في البيان الملف. عند الإشارة إلى تهيئة XML الجديدة، يتم تجاهل سمة android:fullBackupContent التي تشير إلى الإعدادات القديمة. على الأجهزة التي تعمل بالإصدار 12 من نظام التشغيل Android أو الإصدارات الأحدث يعرض نموذج الرمز البرمجي التالي الرمز الجديد إدخالات ملف البيان:

<application
    ...
    <!-- The below attribute is ignored. -->
    android:fullBackupContent="old_config.xml"
    <!-- You can point to your new configuration using the new
         dataExtractionRules attribute . -->
    android:dataExtractionRules="new_config.xml"
    ...>
</application>

إمكانية الاتصال

أذونات البلوتوث

يقدّم Android 12 BLUETOOTH_SCAN, BLUETOOTH_ADVERTISE, أو BLUETOOTH_CONNECT الأذونات. تسهّل هذه الأذونات على التطبيقات التي تستهدف استخدام Android 12 للتفاعل باستخدام البلوتوث الأجهزة، خاصةً بالنسبة إلى التطبيقات التي تتطلب الوصول إلى موقع الجهاز.

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

اتصال نظير إلى نظير بشكل متزامن + اتصال بالإنترنت

بالنسبة إلى التطبيقات التي تستهدف Android 12 (المستوى 31 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث، يجب استخدام الأجهزة المتوافقة يمكن لاتصالات الإنترنت من نظير إلى نظير والإنترنت الاحتفاظ باتصال Wi-Fi متزامن اتصالات بكل من الجهاز النظير والشبكة الأساسية التي توفر الإنترنت، مما يجعل تجربة المستخدم أكثر سلاسة. استهداف التطبيقات لا يزال الإصدار Android 11 (المستوى 30) أو الإصدارات الأقدم يواجه السلوك القديم، حيث انقطع اتصال شبكة Wi-Fi الأساسية قبل الاتصال بشبكة Wi-Fi المشابهة. الخاص بك.

التوافق

WifiManager.getConnectionInfo() يمكن عرض WifiInfo شبكة واحدة فقط. ولهذا السبب، تغيّر سلوك واجهة برمجة التطبيقات في بالطرق التالية في نظام التشغيل Android 12 والإصدارات الأحدث:

  • في حال توفُّر شبكة Wi-Fi واحدة فقط، يتم عرض WifiInfo.
  • في حال توفُّر أكثر من شبكة Wi-Fi واحدة وتشغيل تطبيق الاتصال اتصال نظير إلى نظير، فإن WifiInfo المتوافق مع جهاز النظير هو عاد.
  • في حال توفُّر أكثر من شبكة Wi-Fi واحدة وعدم توفُّر تطبيق الاتصال إلى تشغيل الاتصال من نظير لنظير، وهو اتصال الإنترنت تم إرجاع WifiInfo.

لتقديم تجربة مستخدم أفضل على الأجهزة التي تتوافق مع الصوت المزدوج ننصح باستخدام جميع التطبيقات المتعلقة بشبكات Wi-Fi، وخاصةً التطبيقات التي تؤدي إلى تشغيل اتصالات نظير إلى نظير - النقل بعيدًا عن الاتصال WifiManager.getConnectionInfo() واستخدام بدلاً من ذلك NetworkCallback.onCapabilitiesChanged() للحصول على جميع الكائنات الـ WifiInfo التي تطابق NetworkRequest المستخدم في التسجيل NetworkCallback. تم إيقاف getConnectionInfo() نهائيًا اعتبارًا من نظام التشغيل Android 12.

يعرض نموذج الرمز البرمجي التالي كيفية الحصول على WifiInfo في NetworkCallback:

Kotlin

val networkCallback = object : ConnectivityManager.NetworkCallback() {
  ...
  override fun onCapabilitiesChanged(
           network : Network,
           networkCapabilities : NetworkCapabilities) {
    val transportInfo = networkCapabilities.getTransportInfo()
    if (transportInfo !is WifiInfo) return
    val wifiInfo : WifiInfo = transportInfo
    ...
  }
}

Java

final NetworkCallback networkCallback = new NetworkCallback() {
  ...
  @Override
  public void onCapabilitiesChanged(
         Network network,
         NetworkCapabilities networkCapabilities) {
    final TransportInfo transportInfo = networkCapabilities.getTransportInfo();
    if (!(transportInfo instanceof WifiInfo)) return;
    final WifiInfo wifiInfo = (WifiInfo) transportInfo;
    ...
  }
  ...
};

واجهة برمجة التطبيقات الأصلية لـ mDNSReplyer

يتغيّر Android 12 عند تمكّن التطبيقات من التفاعل مع البرنامج الخفي mDNSReplyer باستخدام واجهة برمجة التطبيقات الأصلية mDNSReplyer. في السابق، عندما سجَّل أحد التطبيقات خدمة على الشبكة ويسمى getSystemService() بدأت خدمة NSD الخاصة بالنظام تشغيل البرنامج الخفي mDNSReplyer، حتى إذا لم يستدعي التطبيق أي طرق NsdManager حتى الآن. ثم اشترك البرنامج الخفي في الجهاز إلى مجموعات البث المتعدد العُقد، مما يتسبب في تنشيط النظام أكثر بشكل متكرر واستخدام طاقة إضافية. للحدّ من استخدام البطارية، ننصح باستخدام نظام Android 12 ويبدأ النظام الآن في تشغيل البرنامج الخفي mDNSResponseer فقط عند الحاجة إليه. لأحداث NSD ويوقفها بعد ذلك.

ولأن هذا التغيير يؤثر في وقت توفر البرنامج الخفي mDNSResponseer، فإن التطبيقات أن البرنامج الخفي mDNSResponseer سيبدأ بعد طلب قد تتلقى طريقة getSystemService() رسائل من النظام مفادها أن البرنامج الخفي mDNSReplyer غير متاح. التطبيقات التي تستخدم NsdManager ولا تستخدم استخدام واجهة برمجة التطبيقات mDNSReplyer الأصلية لا تتأثر بهذا التغيير.

مكتبات البائعين

المكتبات المشتركة الأصلية التي يوفّرها المورّد

المكتبات المشتركة الأصلية غير التابعة لـ NDK التي يوفّرها مورّدو صناعة السيليكون أو الشركات المصنّعة للأجهزة تلقائيًا إذا كان التطبيق يستهدف نظام التشغيل Android 12 (المستوى 31 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث. تشير رسالة الأشكال البيانية لا يمكن الوصول إلى المكتبات إلا عندما يتم طلبها صراحةً باستخدام <uses-native-library> .

إذا كان التطبيق يستهدف نظام التشغيل Android 11 (المستوى 30 لواجهة برمجة التطبيقات) أو أقل، يجب ضبط العلامة <uses-native-library> غير مطلوبة. في هذه الحالة، سيكون أي إعلان مدمج مع المحتوى يمكن الوصول إليها بغض النظر عما إذا كانت مكتبة NDK.

تم تعديل القيود غير المستندة إلى حزمة تطوير البرامج (SDK).

يتضمّن Android 12 قوائم معدَّلة بالحِزم المحظورة غير المستنِدة إلى حزمة تطوير البرامج (SDK) بناءً على التعاون مع مطوري برامج Android وأحدث للاختبار الداخلي. كلما أمكن، نتأكد من أن البدائل العامة قبل أن نحظر الواجهات التي لا تعتمد على حزمة SDK

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

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

لمعرفة مزيد من المعلومات حول التغييرات في هذا الإصدار من Android، يمكنك الاطّلاع على التحديثات على القيود المفروضة على الواجهة غير المستندة إلى حزمة تطوير البرامج (SDK) في الإصدار 12 من نظام التشغيل Android. معرفة المزيد حول الواجهات غير المستندة إلى حزمة تطوير البرامج (SDK) بوجهٍ عام، يُرجى الاطّلاع على المقالة القيود المفروضة على الواجهات غير المستنِدة إلى حزمة تطوير البرامج (SDK) الواجهات.