دليل المستويات لرحلة تحسين الأداء
مرحبًا بك في اليوم الرابع من "أسبوع تسليط الضوء على الأداء". بعد أن تعرّفت على بعض الأدوات الرائعة وأفضل الممارسات التي قدّمناها مؤخرًا، مثل أداة R8 Optimizer وProfile Guided Optimization مع Baseline Profiles و Startup Profiles، قد تتساءل عن الخطوة الأولى في رحلة تحسين الأداء.
لقد أعددنا دليلًا تفصيليًا لمستويات الأداء لمساعدة فريق تطوير التطبيقات على الأجهزة الجوّالة في أي مرحلة من مراحل التطوير، سواء كنت مطوّرًا واحدًا لتطبيق وتريد البدء في تحسين الأداء، أو كان لديك فريق كامل مخصّص لتحسين الأداء على Android.
يتضمّن دليل تسوية الأداء 5 مستويات. سنبدأ بالمستوى 1 الذي يقدّم أدوات أداء تتطلّب الحد الأدنى من جهد التكيّف، وسننتقل إلى المستوى 5 المثالي للتطبيقات التي لديها الموارد اللازمة للحفاظ على إطار عمل مخصّص للأداء.
استكشِف المستوى الذي يناسبك أكثر:
المستوى 1: استخدام ميزة مراقبة الحقول التي توفّرها Play Console
ننصحك أولاً بالاستفادة من "مؤشرات Android الحيوية" في Play Console لعرض بيانات رصد الحقول التي يتم جمعها تلقائيًا، ما يمنحك إحصاءات حول تطبيقك بأقل جهد ممكن.
مؤشرات Android الحيوية هي إحدى مبادرات Google التي تهدف إلى جمع بيانات الحقول هذه وعرضها لك تلقائيًا.
في ما يلي توضيح لطريقة عرض هذه البيانات:
- جمع البيانات: عندما يوافق المستخدم على المشاركة، يسجّل جهاز Android تلقائيًا أحداث الأداء والاستقرار الرئيسية من جميع التطبيقات، بما في ذلك تطبيقك.
- البيانات المجمّعة: يجمع Google Play هذه البيانات ويخفي هويتها من مستخدمي تطبيقك.
- عرض الإحصاءات: يتم عرض البيانات في لوحة بيانات "مؤشرات Android الحيوية" ضمن Google Play Console.
تتتبّع لوحة بيانات "مؤشرات Android الحيوية" العديد من المقاييس، ولكن تم تصنيف بعضها على أنّها مؤشرات حيوية أساسية. وهي الأهم لأنّها يمكن أن تؤثر في ظهور تطبيقك وترتيبه على "متجر Google Play".
مؤشرات الأداء الأساسية
مقاييس الجودة الفنية الأساسية في Google Play لتحقيق أقصى قدر من الظهور على Google Play، يجب أن يكون تطبيقك أقل من معايير تحديد الأداء السيئ لهذه المقاييس. | |
| نسبة الأعطال التي لاحظها المستخدمون | يشير هذا المقياس إلى النسبة المئوية للمستخدمين النشطين يوميًا الذين واجهوا عطلاً واحدًا على الأقل من الأعطال التي من المحتمل أن تكون ملحوظة. |
| نسبة أخطاء ANR التي لاحظها المستخدمون | تعرِض هذه البطاقة النسبة المئوية للمستخدمين النشطين يوميًا الذين واجهوا خطأ ANR واحدًا على الأقل من الأخطاء التي من المحتمل أن تكون ملحوظة. |
| استخدام البطارية بشكل زائد | النسبة المئوية لجلسات خلفية شاشة الساعة التي يتجاوز فيها استخدام البطارية 4.44% في الساعة |
| جديد: عمليات قفل التنشيط الجزئي الزائدة عن الحد | النسبة المئوية لجلسات المستخدمين التي يتجاوز فيها الاستخدام التراكمي لقفل التنشيط غير المعفى ساعتين |
تشمل المؤشرات الحيوية الأساسية نسبة الأعطال التي لاحظها المستخدمون ونسبة أخطاء ANR والاستخدام المفرط للبطارية والمقياس الذي تم تقديمه حديثًا بشأن عمليات قفل التنشيط الجزئي الزائدة عن الحدّ.
نسبة أخطاء ANR التي لاحظها المستخدمون
يمكنك استخدام لوحة بيانات أخطاء ANR في "مؤشرات Android الحيوية" للاطّلاع على تتبُّعات تسلسل استدعاء الدوال البرمجية للمشاكل التي تحدث في بيئة التشغيل الحقيقية والحصول على إحصاءات واقتراحات حول كيفية حلّ المشكلة.
يمكنك التوغّل في تفاصيل خطأ ANR معيّن حدث، للاطّلاع على تتبُّع تسلسل استدعاء الدوال البرمجية بالإضافة إلى إحصاءات حول الأسباب المحتملة للمشكلة.
يمكنك أيضًا الاطّلاع على إرشادات أخطاء ANR لمساعدتك في تحديد المشاكل الشائعة التي قد تؤدي إلى حدوث أخطاء ANR وحلّها.
نسبة الأعطال التي لاحظها المستخدمون
استخدِم لوحة بيانات الأعطال في "مؤشرات Android الحيوية" لتصحيح أخطاء الأعطال بشكل أكبر وعرض عيّنة من تتبُّع تسلسل استدعاء الدوال البرمجية التي تحدث داخل تطبيقك.
تتضمّن مستنداتنا أيضًا إرشادات حول تحديد المشاكل وحلّها في حالات الأعطال المحدّدة. على سبيل المثال، يناقش دليل تحديد المشاكل المتعلقة بالخدمات التي تعمل في المقدّمة وحلّها طرقًا لتحديد المشاكل الشائعة التي تحدث فيها الأعطال وحلّها.
استخدام البطارية بشكل زائد
لتقليل جلسات خلفية شاشة الساعة التي تستخدم البطارية بشكل مفرط على Wear OS، اطّلِع على دليل Wear حول كيفية تحسين البطارية والحفاظ عليها.
[جديد] عمليات قفل التنشيط الجزئي الزائدة عن الحد
أعلنّا مؤخرًا أنّه قد يتم اتخاذ إجراءات إضافية بشأن التطبيقات التي تتجاوز الحدّ المسموح به لعمليات قفل التنشيط الجزئي الزائدة عن الحدّ، وذلك اعتبارًا من 1 مارس 2026.
بالنسبة إلى الأجهزة الجوّالة، ينطبق مقياس "مؤشرات Android الحيوية" على عمليات قفل تنشيط الشاشة غير المعفاة التي يتم الحصول عليها عندما تكون الشاشة مطفأة ويكون التطبيق مُشغَّلاً في الخلفية أو يشغّل خدمة تعمل في المقدّمة. تعتبر "مؤشرات Android الحيوية" استخدام قفل التنشيط الجزئي مفرطًا إذا تم الاحتفاظ بأقفال التنشيط لمدة ساعتين على الأقل خلال فترة 24 ساعة وتأثّرت أكثر من% 5 من جلسات تطبيقك، وذلك على مدار 28 يومًا.
لتحديد المشاكل وحلّها المتعلقة بالاستخدام المفرط لقفل التنشيط، يُرجى الاطّلاع على منشور المدونة الفني.
راجِع مستندات "مؤشرات Android الحيوية" لمواصلة رحلتك نحو الاستفادة بشكل أفضل من هذه المؤشرات.
المستوى 2: اتّباع بنود العمل في "تقييم أداء التطبيق"
بعد ذلك، انتقِل إلى استخدام نقاط أداء التطبيق للعثور على عناصر الإجراءات التي يمكن الاستفادة منها بشكل كبير للارتقاء بأداء تطبيقك.
مقياس أداء تطبيقات Android هو إطار عمل موحّد لقياس الأداء الفني لتطبيقك. تمنحك هذه الميزة نتيجة تتراوح بين 0 و100، وتشير النتيجة الأقل إلى توفّر مجال أكبر للتحسين.
لتحقيق نتائج سريعة، عليك أولاً البدء بنتيجة الأداء الثابتة. وغالبًا ما تكون هذه التغييرات عبارة عن تغييرات في الإعدادات أو تحديثات في الأدوات تؤدي إلى تحسينات كبيرة في الأداء.
الخطوة 1: إجراء التقييم الثابت
يقيّم التقييم الثابت إعدادات مشروعك واستخدام الأدوات. وغالبًا ما تكون هذه الطرق هي الأسرع لتحسين الأداء.
انتقِل إلى قسم "النتيجة الثابتة" في صفحة لوحة النتائج واتّبِع الخطوات التالية:
- تقييم إصدار المكوّن الإضافي لنظام Gradle المتوافق مع Android (AGP)
- استخدِم أداة R8 لتقليص الرموز بشكل تدريجي أو استخدِم أداة R8 في الوضع الكامل لتقليص رموز التطبيق وتحسينها.
- استخدام ملفات Baseline الشخصية التي تعمل على تحسين سرعة تنفيذ الرمز البرمجي من عملية التشغيل الأولى، ما يؤدي إلى تحسين الأداء عند تثبيت أي تطبيق جديد وعند تحديث التطبيق.
- استخدِم ملفات تعريف التطبيقات عند بدء التشغيل لتحسين تخطيط Dex. يستخدم نظام الإنشاء "ملفات تعريف بدء التشغيل" لتحسين الفئات والطُرق التي تحتوي عليها من خلال تحسين تخطيط الرمز البرمجي في ملفات DEX الخاصة بحزمة APK.
- الترقية إلى أحدث إصدار من Jetpack Compose
الخطوة 2: إجراء التقييم الديناميكي
بعد تطبيق التحسينات السهلة الثابتة، استخدِم التقييم الديناميكي للتحقّق من التحسينات على جهاز حقيقي. يمكنك أولاً إجراء ذلك يدويًا باستخدام جهاز فعلي وساعة توقّف.
انتقِل إلى قسم "النتيجة الديناميكية" في صفحة لوحة النتائج واتّبِع الخطوات التالية:
- إعداد بيئة الاختبار باستخدام جهاز فعلي ننصحك باستخدام جهاز منخفض المواصفات لتضخيم مشاكل الأداء، ما يسهّل رصدها.
- قياس وقت بدء التشغيل من مشغّل التطبيقات شغِّل تطبيقك على البارد من رمز مشغّل التطبيقات وقِس الوقت المستغرَق إلى أن يصبح تفاعليًا.
- قياس وقت بدء تشغيل التطبيق من إشعار، بهدف تقليل وقت بدء التشغيل من الإشعار إلى أقل من بضع ثوانٍ
- قِس أداء العرض من خلال التنقّل بين شاشاتك الأساسية والصور المتحركة.
بعد إكمال هذه الخطوات، ستتلقّى نتيجة تتراوح بين 1 و100 لكل من النتائج الثابتة والديناميكية، ما يتيح لك فهم أداء تطبيقك وتحديد الجوانب التي يجب التركيز عليها.
المستوى 3: الاستفادة من أُطر اختبار الأداء المحلي
بعد البدء في تقييم الأداء الديناميكي، قد تجد أنّ قياس الأداء يدويًا أمر شاق للغاية. ننصحك بأتمتة اختبار الأداء باستخدام أُطر اختبار الأداء، مثل Macrobenchmarks وUiAutomator.
Macrobenchmark 💚 UiAutomator
يمكن اعتبار Macrobenchmark وUiAutomator أداتَين تعملان معًا، حيث إنّ Macrobenchmark هي أداة القياس. وهي تشبه ساعة الإيقاف وعداد معدّل اللقطات في الثانية الذي يعمل خارج تطبيقك. وهي مسؤولة عن بدء تشغيل تطبيقك وتسجيل المقاييس (مثل وقت بدء التشغيل أو اللقطات التي تم إسقاطها) وإيقاف التطبيق. وUiAutomator هو المستخدم الآلي. تتيح لك المكتبة كتابة رمز للتفاعل مع شاشة الجهاز. يمكنه العثور على رمز والنقر على زر والتنقّل في قائمة وغير ذلك.
كيفية كتابة اختبار
عند كتابة اختبار، عليك تضمين رمز UiAutomator داخل كتلة Macrobenchmark.
- تحديد الاختبار: استخدِم
@MacrobenchmarkRule - بدء القياس: اتّصِل برقم
benchmarkRule.measureRepeated. - التحكّم في واجهة المستخدم: داخل هذا الرمز، استخدِم رمز UiAutomator البرمجي لتشغيل تطبيقك والبحث عن عناصر واجهة المستخدم والتفاعل معها.
في ما يلي مثال على مقتطف الرمز البرمجي الذي يوضّح كيفية اختبار قائمة Compose بحثًا عن إيقاف مؤقت لعرض واجهة المستخدم في التمرير.
benchmarkRule.measureRepeated(
// ...
metrics = listOf(
FrameTimingMetric(),
),
startupMode = StartupMode.COLD,
iterations = 10,
) {
// 1. Launch the app's main activity
startApp()
// 2. Find the list using its resource ID and scroll down
onElement { viewIdResourceName == "$packageName.my_list" }
.fling(Direction.DOWN)
}4. مراجعة النتائج: يقدّم لك كل اختبار معلومات تم قياسها بدقة لمنحك أفضل البيانات عن أداء تطبيقك.
timeToInitialDisplayMs min 1894.4, median 2847.4, max 3355.6 frameOverrunMs P50 -3.2, P90 6.2, P95 10.4, P99 119.5
حالات الاستخدام الشائعة
توفّر مكتبة Macrobenchmark العديد من المقاييس الأساسية الجاهزة للاستخدام. تتيح لك ميزة StartupTimingMetric قياس وقت بدء تشغيل التطبيق بدقة. تتيح لك FrameTimingMetric فهم أداء عرض التطبيق أثناء الاختبار.
للمزيد من المعلومات، يمكنك الاطّلاع على دليل مفصّل وكامل حول استخدام Macrobenchmarks وUiAutomator إلى جانب عينات الرموز.
المستوى 4: استخدام أدوات تحليل عمليات التتبُّع، مثل Perfetto
تُستخدَم أدوات تحليل التتبُّع، مثل Perfetto، عندما تحتاج إلى الاطّلاع على ما هو أبعد من الرمز البرمجي لتطبيقك. على عكس أدوات تصحيح الأخطاء أو أدوات تحليل الأداء العادية التي لا ترى سوى عمليتك، تسجّل أداة Perfetto حالة الجهاز بالكامل، بما في ذلك جدولة النواة وتردد وحدة المعالجة المركزية والعمليات الأخرى وخدمات النظام، ما يمنحك سياقًا كاملاً لمشاكل الأداء.
يمكنك الاطّلاع على قائمة تشغيل "تصحيح أخطاء الأداء" على YouTube للحصول على تعليمات فيديو حول تصحيح أخطاء الأداء باستخدام عمليات تتبُّع النظام و"أداة تحليل الأداء" في "استوديو Android" وPerfetto.
كيفية استخدام Perfetto لتصحيح أخطاء الأداء
تتمثّل سير العمل العام لتصحيح أخطاء الأداء باستخدام أدوات تحليل عمليات التتبُّع في تسجيل عملية التتبُّع وتحميلها وتحليلها.
الخطوة 1: تسجيل عملية تتبُّع
يمكنك تسجيل تتبُّع النظام باستخدام عدة طرق:
- تسجيل تتبُّع يدويًا على الجهاز مباشرةً من خيارات المطوّرين
- استخدام أداة تحليل وحدة المعالجة المركزية في "استوديو Android"
- استخدام واجهة مستخدم Perfetto
الخطوة 2: تحميل التتبُّع
بعد الحصول على ملف التتبُّع، عليك تحميله في أداة التحليل.
- افتح Chrome وانتقِل إلى ui.perfetto.dev.
- اسحب ملف
.perfetto-trace(أو.pftrace) وأفلِته مباشرةً في نافذة المتصفّح. - ستعالج واجهة المستخدم الملف وتعرض المخطط الزمني.
الخطوة 3: تحليل التتبُّع
يمكنك استخدام واجهة مستخدم Perfetto أو أداة محلّل الأداء في استوديو Android للتحقّق من مشاكل الأداء. يمكنك الاطّلاع على هذه الحلقة من سلسلة MAD Skills حول الأداء، حيث تناقش مهندسة الأداء "كارمن جاكسون" أداة Perfetto traceviewer.
سيناريوهات لفحص عمليات تتبُّع النظام باستخدام Perfetto
Perfetto هي أداة متخصّصة ويمكنها تقديم معلومات عن كل ما حدث على جهاز Android أثناء تسجيل التتبُّع. يكون ذلك مفيدًا بشكل خاص عندما يتعذّر عليك تحديد السبب الأساسي لبطء الأداء باستخدام السجلّات العادية أو أدوات تحليل الأداء الأساسية.
تصحيح أخطاء إيقاف مؤقت لعرض واجهة المستخدم (الإطارات التي تم إسقاطها)
إذا كان تطبيقك يتلعثم أثناء التمرير، يمكن أن يوضّح لك Perfetto السبب الدقيق لعدم اكتمال عرض إطار معيّن في الوقت المحدّد.
إذا كان السبب هو التطبيق، قد تلاحظ أنّ سلسلة المحادثات الرئيسية تعمل لمدة طويلة لإجراء تحليل مكثّف، ما يشير إلى سيناريوهات يجب فيها نقل العمل إلى معالجة غير متزامنة.
إذا كان السبب هو النظام، قد ترى سلسلة التعليمات الرئيسية جاهزة للتنفيذ، ولكن أعطى برنامج جدولة نواة وحدة المعالجة المركزية الأولوية لخدمة تابعة لنظام التشغيل مختلفة، ما يجعل تطبيقك ينتظر (تضارب وحدة المعالجة المركزية). يشير ذلك إلى السيناريوهات التي قد تحتاج فيها إلى تحسين استخدام واجهات برمجة التطبيقات على المنصة.
تحليل مشكلة بطء التطبيق عند بدء تشغيله
تتسم عملية بدء التشغيل بالتعقيد، إذ تشمل تهيئة النظام وتفرّع العمليات وتحميل الموارد. تعرض أداة Perfetto هذا المخطط الزمني بدقة.
يمكنك معرفة ما إذا كنت تنتظر مكالمات Binder (التواصل بين العمليات). إذا onCreate انتظر PackageManager وقتًا طويلاً للحصول على ردّ من النظام، سيعرض Perfetto حالة الحظر هذه بوضوح.
يمكنك أيضًا معرفة ما إذا كان تطبيقك ينفّذ مهامًا أكثر من اللازم أثناء بدء تشغيله. على سبيل المثال، إذا كنت بصدد إنشاء المزيد من طرق العرض وتصميمها أكثر مما يحتاج التطبيق إلى عرضه، يمكنك الاطّلاع على هذه العمليات في التتبُّع.
التحقيق في استنزاف البطارية واستخدام وحدة المعالجة المركزية
بما أنّ Perfetto يرى النظام بأكمله، فهو مثالي للعثور على استنزافات الطاقة غير المرئية.
يمكنك تحديد العمليات التي تحتفظ بأقفال التنشيط، ما يمنع الجهاز من الدخول في وضع السكون ضمن مسارات "حالة الجهاز". يمكنك الاطّلاع على مزيد من المعلومات في مشاركة المدونة حول عمليات قفل التنشيط. يمكنك أيضًا استخدام Perfetto لمعرفة ما إذا كانت مهام الخلفية تعمل بشكل متكرر جدًا أو توقظ وحدة المعالجة المركزية بدون داعٍ.
المستوى 5: إنشاء إطار عمل خاص بك لتتبُّع الأداء
المستوى الأخير مخصّص للتطبيقات التي لديها فِرق لديها الموارد اللازمة للحفاظ على إطار عمل لتتبُّع الأداء.
يتضمّن إنشاء إطار عمل مخصّص لتتبُّع الأداء على Android الاستفادة من العديد من واجهات برمجة التطبيقات الخاصة بالنظام لتسجيل البيانات طوال دورة حياة التطبيق، بدءًا من بدء التشغيل وحتى الخروج، وأثناء سيناريوهات معيّنة تتضمّن أحمالاً كبيرة.
باستخدام ApplicationStartInfo وProfilingManager وApplicationExitInfo، يمكنك إنشاء نظام قياس عن بُعد قوي يقدّم تقارير عن كيفية بدء تطبيقك ومعلومات تفصيلية عن الإجراءات التي اتّخذها أثناء التشغيل وسبب توقّفه.
ApplicationStartInfo: تتبُّع كيفية بدء تشغيل التطبيق
توفّر الفئة ApplicationStartInfo، المتاحة بدءًا من الإصدار 15 من نظام التشغيل Android (المستوى 35 من واجهة برمجة التطبيقات)، مقاييس تفصيلية حول بدء تشغيل التطبيق في بيئة التشغيل. وتتضمّن البيانات ما إذا كانت عملية التشغيل على البارد أو البطيء أو السريع، ومدة مراحل التشغيل المختلفة.
يساعدك ذلك في تطوير مقياس أساسي للشركات الناشئة باستخدام بيانات الإنتاج لتحسين الأداء بشكل أكبر، وهو ما قد يصعب إعادة إنتاجه محليًا. يمكنك استخدام هذه المقاييس لإجراء اختبارات A/B وتحسين خطوات بدء التشغيل.
والهدف هو تسجيل مقاييس الإطلاق بدقة بدون إعداد كل مرحلة من مراحل التهيئة يدويًا.
يمكنك طلب هذه البيانات بشكل غير مباشر بعد وقت معيّن من تشغيل التطبيق.
ProfilingManager: تسجيل سبب البطء
تتيح واجهة برمجة التطبيقات ProfilingManager (المستوى 35) لتطبيقك بدء عمليات تتبُّع النظام آليًا على أجهزة المستخدمين. ويُعدّ ذلك مفيدًا في رصد مشاكل الأداء المؤقتة التي لا يمكنك إعادة إنتاجها محليًا.
الهدف هو تسجيل عملية تتبُّع تلقائيًا عند رصد رحلة مستخدم أساسية معيّنة تعمل ببطء أو تواجه مشكلة في الأداء.
يمكنك تسجيل متتبِّع يتم تشغيله عند استيفاء شروط معيّنة أو تشغيله يدويًا عند رصد مشكلة في الأداء، مثل إيقاف مؤقت لعرض واجهة المستخدم أو استخدام الذاكرة بشكل مفرط أو استنزاف البطارية.
راجِع مستنداتنا حول كيفية تسجيل ملف تعريف واسترداد بيانات تحديد المشاكل وتحليلها واستخدام أوامر تصحيح الأخطاء.
ApplicationExitInfo: تتبُّع سبب إيقاف التطبيق
تخبرك السمة ApplicationExitInfo (المستوى 30 لواجهة برمجة التطبيقات) عن سبب توقّف عمل العملية السابقة. وهذا أمر بالغ الأهمية للعثور على الأعطال الأصلية أو أخطاء ANR أو عمليات إيقاف النظام بسبب الاستخدام المفرط للذاكرة (OOM). يمكنك أيضًا الحصول على تتبُّع تفصيلي لخطأ Tombstone باستخدام واجهة برمجة التطبيقات getTraceInputStream.
تهدف واجهة برمجة التطبيقات إلى فهم مشاكل الثبات التي لا تؤدي إلى تشغيل أدوات إعداد تقارير الأعطال العادية في Java (مثل عمليات إيقاف التطبيقات بسبب نقص الذاكرة).
يجب تشغيل واجهة برمجة التطبيقات هذه عند تشغيل التطبيق في المرة التالية.
الخطوات التالية
تحسين أداء Android هو رحلة تتضمّن خطوات متعدّدة. نحن متحمّسون لرؤية كيف ستستخدمون هذه الأدوات لتحسين أداء قنواتكم.
يمكنك متابعة حلقة جديدة من برنامج Ask Android غدًا
لقد قلّصت حجم تطبيقك باستخدام R8 وحسّنت وقت التشغيل باستخدام ميزة "التحسين المستند إلى الملف الشخصي". وقياس أداء تطبيقك
ندعوك للانضمام إلينا غدًا في جلسة "اسأل Android" المباشرة. اطرح أسئلتك الآن باستخدام #AskAndroid واحصل على إجابات من الخبراء.
-
طرق التنفيذعلى الرغم من أنّ أداء التطبيق غالبًا ما يرتبط بواجهة مستخدم سلسة وأوقات بدء سريعة، إلا أنّ الذاكرة هي الأساس الصامت الذي تُبنى عليه هذه المقاييس المرئية. لم يعُد سرًا أنّنا نشهد تحوّلاً أصبح فيه حجم ذاكرة الجهاز أكثر أهمية من أي وقت مضى.
-
طرق التنفيذإدراكًا منّا أنّ استنزاف البطارية بشكل مفرط هو من أهم المشاكل التي تواجه مستخدمي Android، اتّخذت Google خطوات مهمة لمساعدة المطوّرين في إنشاء تطبيقات أكثر كفاءة في استهلاك الطاقة.
Alice Yuan • مدة القراءة: 8 دقائق -
طرق التنفيذيسرّنا اليوم الإعلان عن بيانات اعتماد جديدة للبريد الإلكتروني تم التحقّق منها صادرة عن Google، ويمكن للمطوّرين الآن استردادها مباشرةً من واجهة برمجة التطبيقات Digital Credential API في Credential Manager على Android.
Niharika Arora, Jean-Pierre Pralle • يستغرق الاطّلاع على المقال 3 دقائق
يمكنك تلقّي أحدث الإحصاءات حول تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.