إعداد المكتبة والتحقق من العملية

توضّح هذه الصفحة كيفية إعداد المكتبة في رمز لعبتك والتأكّد من أنّها تحمِّل البيانات إلى 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 ثانية، قم بما يلي:

  1. اختَر Google > أداة Android Performance Tuner للوصول إلى الإعدادات.
  2. حدد علامة التبويب إعدادات الأدوات وانقر على استخدام الإعدادات المتقدمة.
  3. تحقَّق من أنّ حقل الفاصلات (بالدقائق) يحتوي على 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 وإصدار Unity 2017 و2018 (ولكن ليس للإصدارات اللاحقة من 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.