אתחול הספרייה ואימות הפעולה

בדף הזה מוסבר איך מאתחלים את הספרייה בקוד המשחק, ומאמתים את הזהות הוא מעלה נתונים ל-Google Play. כדי למצוא מידע נוסף על של הספריות. מאמרי עזרה

הפעלת הספרייה

בשיטת אתחול בתחילת המשחק, מאתחלים את הספרייה באמצעות יוצר את AndroidPerformanceTuner וקורא לו Start() method:

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 TVr ואת המשחק עם אינסטרומנטציה. דפי היומן מראים מתי Android Performance Tur (טיונר) התחיל לפעול ומתי הטלמטריה הועלתה לממשקי ה-API של Google Play Console. מאוחר יותר, ההצהרות האלה מופיעות ביומן כדי לוודא שהפלאגין פועל בצורה נכונה.

אתחול מאוחר (Vulkan בלבד)

אם המשחק שלך מטרגט את Vulkan ומשתמש בו בקצב הפריימים של Android, ב-Android Performance Tur צריך להיות אתחול מאוחר:

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 דקות) כדי שהמשחק לא שליחת בקשות רבות מדי לממשקי ה-API, מה שחשוב במיוחד למשתמשים שאין להם חבילת גלישה שכוללת נתונים ללא הגבלה. A גדול בנוסף, מרווחי זמן אלה מונעים שימוש יתר בסוללת המכשיר.

כדי לוודא שמרווח הזמן מוגדר ל-30 שניות:

  1. בוחרים באפשרות Google > Android Performance Listenr כדי לגשת להגדרות.
  2. בוחרים בכרטיסייה הגדרות אינסטרומנטציה ולוחצים על שימוש מתקדם הגדרות.
  3. מוודאים שהשדה מרווחי זמן (בדקות) מכיל 0.5.

הכרטיסייה הגדרות אינסטרומנטציה בפלאגין

בדיקה אם הפעולה תקינה

אם אתם משתמשים ב-IL2CPP או בהסרת קוד: ניהול של הסרת הקוד.

יוצרים את המשחק ל-Android. בזמן שהמשחק מופעל במכשיר, צריך לפתוח במסוף במחשב ומפעילים את adb logcat:

adb logcat

בפלט של adb logcat, מחפשים את "TuningFork" (כוונון כוונון) שם פנימי של הספרייה):

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

אם עשיתם טעות במהלך הגדרת הפלאגין, למשל שכחתם להגדיר את הפלאגין של מפתח ה-API תופיע שגיאה ביומני האתחול:

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 Tur (טיונר) מעלה נתוני טלמטריה. אם מופיע 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 כמו 30 שניות.

ניהול של החרגת הקוד

Google.Protobuf.dll משתמשת בהשתקפות. במהלך הסרת הקוד, חלק וייתכן שהוא יוסר. כדי להימנע מהסרה זו, הפלאגין מכיל קובץ link.xml עם מידע על הסמלים שכדאי לשמור. אם צריך פונקציונליות של Protobuf שמשתמש בהשתקפות, ויש לכם קוד הסרת המידע מופעלת, הוסיפו את המידע הזה לקובץ link.xml כדי לשמר את סמלים.

אפשר לקרוא עוד על הסרת קוד מנוהלת במסמכי התיעוד של Unity.

אם צריך לשמור את כל הסמלים ב-protobuf, יש להוסיף קובץ link.xml של הפרויקט שמכיל את הפרטים הבאים:

<linker>
  <assembly fullname="Google.Protobuf" preserve="all"/>
</linker>

הידור מראש בזמן (AOT)

נדרש הידור מראש בזמן אמת עבור הקצה העורפי של IL2CPP ו-Unity בגרסאות 2017 וב-2018 (אבל לא לגרסאות מאוחרות יותר של Unity).

יכול להיות שהמהדר של AOT לא ייצור קוד לשיטות גנריות. צריך לאלץ את המהדר (compiler) כדי ליצור את הקוד המתאים שנדרש ל-protobuf באמצעות הוספת השיטה הבאה:

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.