Zainicjuj bibliotekę i sprawdź operację

Na tej stronie opisujemy, jak zainicjować bibliotekę w kodzie gry i sprawdzić, czy przesyła dane do Google Play. Aby znaleźć więcej informacji na temat funkcji biblioteki, patrz dokumentacji referencyjnej.

Zainicjuj bibliotekę

W metodzie inicjowania na początku gry zainicjuj bibliotekę przez tworząc instancję AndroidPerformanceTuner i wywołując jej 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);
        };
    }
}

Ten kod wystarczy, aby uruchomić narzędzie Android Performance Tuner i uruchomić grę instrumentowane. Instrukcje dziennika wskazują, kiedy funkcja Android Performance Tuner została uruchomiona. oraz o przesłaniu danych telemetrycznych do interfejsów API Konsoli Google Play. Później znajdziesz w dzienniku te instrukcje, aby potwierdzić, że wtyczka działa .

Późna inicjalizacja (tylko Vulkan)

Jeśli Twoja gra jest kierowana na interfejs Vulkan i korzysta z funkcji Android Frame Pacing, Android Performance Tuner powinna mieć późną inicjalizację:

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);
    };
}

Weryfikowanie odstępu między przesyłaniem danych telemetrycznych

Domyślny odstęp czasu między przesyłaniem danych telemetrycznych w ustawieniach wtyczki to 30 sek. Ten czas jest ustawiony na krótki czas, aby ułatwić weryfikację przesyłać dane telemetryczne. Gdy opublikujesz grę w wersji produkcyjnej, ustaw należy robić to dość często (np. co 10 minut), aby gra wykonywanie zbyt wielu żądań do interfejsów API, co jest szczególnie ważne dla użytkowników, którzy nie mają abonamentu na nielimitowaną transmisję danych. Duży pozwala też uniknąć nadmiernego zużycia baterii.

Aby sprawdzić, czy interwał jest ustawiony na 30 sekund, wykonaj te czynności:

  1. Wybierz Google > Android Performance Tuner, by otworzyć ustawienia.
  2. Wybierz kartę Instrumentation Settings (Ustawienia instrumentacji) i kliknij Use Advanced (Użyj zaawansowanych). ustawieniach.
  3. Sprawdź, czy pole Odstępy (minuty) zawiera wartość 0,5.

Karta Instrumentation settings (Ustawienia instrumentacji) we wtyczce

Sprawdź poprawność działania

Jeśli używasz IL2CPP lub usuwania kodu, zapoznaj się z artykułem Zarządzaj usuwaniem kodu.

Utwórz grę na Androida. Podczas uruchamiania gry na urządzeniu otwórz terminala na komputerze i uruchom adb logcat:

adb logcat

W danych wyjściowych adb logcat wyszukaj „TuningFork” (ponieważ Tuning Fork to wewnętrzna nazwa biblioteki):

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

Jeśli popełnisz błąd podczas konfigurowania wtyczki, np. zapomniałeś ustawić API, w dziennikach inicjowania pojawi się błąd:

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

Sprawdź, czy Android Performance Tuner przesyła dane telemetryczne. Jeśli w logach widzisz komunikat TuningFork initialized, poczekaj jeszcze i poszukaj logów, które wskazują, przesyłam dane telemetryczne.

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 {}

Możesz też wyszukać w dziennikach hasło „Łączenie z:”. Ta wiadomość jest obserwowana kod odpowiedzi kilka wierszy później.

Jeśli nie widzisz logów przesyłania danych telemetrycznych, sprawdź, czy między kolejnymi przesyłaniem danych w ustawieniach narzędzia Android Performance Tuner. , np. 30 sekund.

Zarządzaj fragmentacją kodu

Google.Protobuf.dll używa odbicia. Podczas usuwania kodu niektóre wymagany kod może zostać usunięty. Aby uniknąć usunięcia, wtyczka zawiera link.xml z informacjami o tym, które symbole należy zachować. Jeśli Potrzebują jakiejś funkcji protobuf, która używa odbicia, a masz kod włączone jest usuwanie, dodaj te informacje do pliku link.xml, aby zachować symboli.

Więcej informacji znajdziesz zarządzane usuwanie kodu w dokumentacji Unity.

Jeśli chcesz zachować wszystkie symbole w protobuf, dodaj plik link.xml do projekt, który zawiera:

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

Kompilacja z wyprzedzeniem (AOT)

Kompilacja z wyprzedzeniem jest wymagana w backendzie IL2CPP i Unity w wersji 2017 i 2018 r. (ale nie w przypadku nowszych wersji Unity).

Kompilator AOT nie może generować kodu dla metod ogólnych. Musisz wymusić kompilatora do wygenerowania właściwego kodu wymaganego przez protobuf, dodając do kodu następującą metodę:

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.
}

Więcej informacji znajdziesz ograniczenia dotyczące skryptów w dokumentacji Unity.