توضّح هذه الصفحة كيفية بدء استخدام المكتبة في رمز لعبتك والتأكّد من أنّها تحمّل البيانات إلى Google Play. للعثور على مزيد من المعلومات حول وظائف مكتبة معيّنة، راجِع المستندات المرجعية.
تهيئة المكتبة
في طريقة الإعداد في بداية لعبتك، يمكنك إعداد المكتبة من خلال إنشاء مثيل AndroidPerformanceTuner
واستدعاء الطريقة Start()
:
using Google.Android.PerformanceTuner;
using UnityEngine;
public class SomeBehaviour : MonoBehaviour
{
AndroidPerformanceTuner<FidelityParams, Annotation> tuner =
new AndroidPerformanceTuner<FidelityParams, Annotation>();
void Start()
{
ErrorCode startErrorCode = tuner.Start();
Debug.Log("Android Performance Tuner started with code: " + startErrorCode);
tuner.onReceiveUploadLog += request =>
{
Debug.Log("Telemetry uploaded with request name: " + request.name);
};
}
}
هذا الرمز كافٍ لبدء استخدام أداة Android Performance Tuner وقياس أداء لعبتك. تشير عبارات السجلّ إلى وقت بدء عمل Android Performance Tuner ووقت تحميل بيانات القياس عن بُعد إلى واجهات برمجة التطبيقات في Google Play Console. ستجد هذه العبارات لاحقًا في السجلّ للتأكّد من أنّ المكوّن الإضافي يعمل بشكل صحيح.
الإعداد المتأخّر (Vulkan فقط)
إذا كانت لعبتك تستهدف Vulkan وتستخدم Android Frame Pacing، يجب أن يتم تهيئة أداة Android Performance Tuner في وقت لاحق:
IEnumerator Start()
{
yield return new WaitForEndOfFrame();
ErrorCode startErrorCode = tuner.Start();
Debug.Log("Android Performance Tuner started with code: " + startErrorCode);
tuner.onReceiveUploadLog += request =>
{
Debug.Log("Telemetry uploaded with request name: " + request.name);
};
}
التحقّق من الفاصل الزمني بين عمليات تحميل بيانات القياس عن بُعد
الفاصل الزمني التلقائي بين عمليات تحميل بيانات القياس عن بُعد في إعدادات المكوّن الإضافي هو 30 ثانية. تم ضبط هذا الوقت على فترة قصيرة لتسهيل عملية التحقّق من تحميل بيانات القياس عن بُعد بشكل صحيح. عند طرح لعبتك في مرحلة الإنتاج، اضبط هذا الخيار على فاصل زمني كبير (على سبيل المثال، كل 10 دقائق) حتى لا ترسل اللعبة عددًا كبيرًا جدًا من الطلبات إلى واجهات برمجة التطبيقات، وهو أمر مهم بشكل خاص للمستخدمين الذين ليس لديهم خطة بيانات للأجهزة الجوّالة تتضمّن بيانات غير محدودة. يساعد الفاصل الزمني الكبير أيضًا في تجنُّب الإفراط في استخدام بطارية الجهاز.
للتأكّد من ضبط الفاصل الزمني على 30 ثانية، اتّبِع الخطوات التالية:
- انقر على Google > Android Performance Tuner للوصول إلى الإعدادات.
- اختَر علامة التبويب إعدادات القياس وانقر على استخدام الإعدادات المتقدّمة.
- تأكَّد من أنّ حقل الفواصل الزمنية (بالدقائق) يحتوي على 0.5.
علامة التبويب
إعدادات القياس في المكوّن الإضافي
التحقّق من التشغيل السليم
إذا كنت تستخدم IL2CPP أو ميزة "إزالة أجزاء من الرمز"، يمكنك الاطّلاع على إدارة ميزة "إزالة أجزاء من الرمز".
إنشاء لعبتك لنظام التشغيل Android أثناء تشغيل لعبتك على أحد الأجهزة، افتح نافذة طرفية على جهاز الكمبيوتر وشغِّل adb logcat
:
adb logcat
في ناتج adb logcat
، ابحث عن "TuningFork" (لأنّ Tuning Fork هو الاسم الداخلي للمكتبة):
02-03 16:55:45.103 10511 10536 I TuningFork: Got settings from tuningfork/tuningfork_settings.bin
02-03 16:55:45.103 10511 10536 I TuningFork: Using local file cache at /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:55:45.105 10511 10536 I TuningFork: OpenGL version 3.2
02-03 16:55:45.105 10511 10536 I TuningFork: TuningFork.GoogleEndpoint: OK
02-03 16:55:45.106 10511 10611 I TuningFork: Creating directory /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:55:45.106 10511 10536 I TuningFork: TuningFork Settings:
[...]
02-03 16:55:45.116 10511 10536 I Unity : Tuningfork started with code: Ok
02-03 16:55:45.107 10511 10536 I TuningFork: TuningFork initialized
02-03 16:55:45.107 10511 10536 I UnityTuningfork: Swappy backend: 1
02-03 16:55:45.107 10511 10536 I TuningFork: Creating directory /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork/V1
02-03 16:55:45.110 10511 10613 I TuningFork: OpenGL version 3.2
02-03 16:55:45.110 10511 10613 I TuningFork:Web: Connecting to: https://performanceparameters.googleapis.com/v1/applications/com.Unity3d.BoatAttackDay/apks/1:generateTuningParameters
إذا حدث خطأ أثناء إعداد المكوّن الإضافي، مثل عدم ضبط مفتاح واجهة برمجة التطبيقات، سيظهر لك خطأ في سجلات الإعداد الأوّلي:
02-03 16:49:44.970 8815 8831 I TuningFork: Got settings from tuningfork/tuningfork_settings.bin
02-03 16:49:44.971 8815 8831 I TuningFork: Using local file cache at /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:49:44.972 8815 8831 I TuningFork: OpenGL version 3.2
02-03 16:49:44.972 8815 8831 W TuningFork.GE: The API key in Tuning Fork TFSettings is invalid
02-03 16:49:44.972 8815 8831 E TuningFork: TuningFork.GoogleEndpoint: FAILED
02-03 16:49:44.973 8815 8831 I Unity : Tuningfork started with code: BadParameter
تأكَّد من أنّ أداة Android Performance Tuner تحمّل بيانات القياس عن بُعد. إذا رأيت TuningFork
initialized
في السجلات، انتظِر قليلاً وابحث عن سجلات تشير إلى أنّه يتم تحميل بيانات القياس عن بُعد.
02-03 16:58:00.552 10511 10611 I TuningFork:Web: Connecting to: https://performanceparameters.googleapis.com/v1/applications/com.Unity3d.BoatAttackDay/apks/1:uploadTelemetry
02-03 16:58:00.898 10511 10611 I TuningFork:Web: Response code: 200
02-03 16:58:00.898 10511 10611 I TuningFork:Web: Response message: OK
02-03 16:58:00.899 10511 10611 I TuningFork.GE: UPLOAD request returned 200 {}
يمكنك أيضًا البحث في السجلات عن "جارٍ الاتصال بـ:". تلي هذه الرسالة رمز الاستجابة بعد بضعة أسطر.
إذا لم تظهر لك سجلّات تحميل بيانات القياس عن بُعد، تأكَّد من ضبط الفاصل الزمني بين كل عملية تحميل في إعدادات Android Performance Tuner على قيمة صغيرة، مثل 30 ثانية.
إدارة إزالة الرموز
يستخدم تطبيق Google.Protobuf.dll
ميزة "الانعكاس". أثناء إزالة الرموز، قد تتم إزالة بعض الرموز المطلوبة. ولتجنُّب هذه الإزالة، يحتوي المكوّن الإضافي على ملف
link.xml
يتضمّن معلومات حول الرموز التي يجب الاحتفاظ بها. إذا كنت بحاجة إلى بعض وظائف البروتوكول المخزَّن مؤقتًا التي تستخدم الانعكاس وتم تفعيل ميزة إزالة الرموز، أضِف هذه المعلومات إلى ملف link.xml
للاحتفاظ بالرموز.
يمكنك الاطّلاع على مزيد من المعلومات حول إزالة الرموز البرمجية المُدارة في مستندات Unity.
إذا كنت بحاجة إلى الاحتفاظ بجميع الرموز في protobuf، أضِف ملف link.xml
إلى مشروعك يحتوي على ما يلي:
<linker>
<assembly fullname="Google.Protobuf" preserve="all"/>
</linker>
التجميع المسبق (AOT)
يجب إجراء عملية تجميع مسبق لوحدة IL2CPP الأساسية والإصدارَين 2017 و2018 من Unity (ولكن ليس للإصدارات الأحدث من Unity).
قد لا ينشئ برنامج التحويل البرمجي AOT رمزًا للطُرق العامة. عليك فرض المترجم البرمجي لإنشاء الرمز المناسب المطلوب لبروتوكول المخزن المؤقت عن طريق إضافة الطريقة التالية:
using Google.Protobuf.Reflection;
using UnityEngine.Scripting;
...
// Don't call this method.
[Preserve]
void ExampleOfForceReflectionInitializationForProtobuf()
{
FileDescriptor.ForceReflectionInitialization<Scene>();
FileDescriptor.ForceReflectionInitialization<ShadowType>();
FileDescriptor.ForceReflectionInitialization<LevelType>();
...
// Add FileDescriptor.ForceReflectionInitialization<T> for each generated enum.
// You can find the list of enums in DevTuningfork.cs -> enum section
// or in the list of enums in Google -> Android Performance Tuner.
}
يمكنك الاطّلاع على مزيد من المعلومات حول قيود البرمجة النصية في مستندات Unity.