Bibliothek initialisieren und Vorgang überprüfen

Auf dieser Seite wird beschrieben, wie du die Bibliothek in deinem Spielcode initialisieren und überprüfen kannst, ob damit Daten in Google Play hochgeladen werden. Weitere Informationen zu bestimmten Bibliotheksfunktionen finden Sie in der Referenzdokumentation.

Bibliothek initialisieren

Initialisieren Sie die Bibliothek zu Beginn des Spiels in einer Initialisierungsmethode, indem Sie AndroidPerformanceTuner instanziieren und die zugehörige Methode Start() aufrufen:

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

Dieser Code reicht aus, um den Android Performance Tuner zu starten und Ihr Spiel zu instrumentieren. Die Logberichte geben an, wann der Android Performance Tuner gestartet und Telemetriedaten in die Google Play Console APIs hochgeladen wurden. Später finden Sie diese Anweisungen im Log, um zu überprüfen, ob das Plug-in ordnungsgemäß funktioniert.

Verspätete Initialisierung (nur Vulkan)

Wenn Ihr Spiel auf Vulkan ausgerichtet ist und Android Frame Pacing verwendet, sollte der Android Performance Tuner eine späte Initialisierung aufweisen:

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

Intervall zwischen Telemetrie-Uploads prüfen

Das Standardintervall zwischen Telemetrieuploads in den Plug-in-Einstellungen beträgt 30 Sekunden. Diese Zeit ist auf ein kurzes Intervall festgelegt, damit das ordnungsgemäße Hochladen der Telemetrie leichter überprüft werden kann. Wenn Sie Ihr Spiel für die Produktion veröffentlichen, legen Sie dafür ein großes Intervall fest (z. B. alle 10 Minuten), damit das Spiel nicht zu viele Anfragen an die APIs sendet. Dies ist besonders wichtig für Nutzer, die keinen Tarif für mobile Daten haben, der unbegrenzte Daten umfasst. Ein großes Intervall verhindert auch, dass der Akku des Geräts zu stark beansprucht wird.

So überprüfen Sie, ob das Intervall auf 30 Sekunden festgelegt ist:

  1. Wählen Sie Google > Android Performance Tuner aus, um auf die Einstellungen zuzugreifen.
  2. Wählen Sie den Tab Instrumentierungseinstellungen aus und klicken Sie auf Erweiterte Einstellungen verwenden.
  3. Achten Sie darauf, dass das Feld Intervalle (Minuten) den Wert 0.5 enthält.

Tab Instrumentierungseinstellungen im Plug-in

Ordnungsgemäßen Betrieb prüfen

Wenn Sie IL2CPP oder Codeentfernung verwenden, lesen Sie Code entfernen.

Entwickeln Sie Ihr Spiel für Android. Öffne ein Terminal auf deinem Computer, während dein Spiel auf einem Gerät gestartet wird, und starte adb logcat:

adb logcat

Suchen Sie in der Ausgabe von adb logcat nach "TuningFork", da "Abstimmung Fork" der interne Name der Bibliothek ist:

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

Wenn Sie bei der Einrichtung des Plug-ins einen Fehler gemacht haben und beispielsweise vergessen haben, den API-Schlüssel festzulegen, wird in den Initialisierungslogs ein Fehler angezeigt:

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

Prüfen Sie, ob der Android Performance Tuner Telemetriedaten hochlädt. Wenn in den Logs TuningFork initialized angezeigt wird, warten Sie noch etwas und suchen Sie nach Logs, die darauf hinweisen, dass Telemetrie hochgeladen wird.

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

Sie können auch in den Protokollen nach „Verbindung zu:“ suchen. Auf diese Nachricht folgt einige Zeilen später der Antwortcode.

Wenn Sie keine Upload-Logs für Telemetriedaten sehen, prüfen Sie, ob Sie das Intervall zwischen den einzelnen Uploads in den Einstellungen des Android Performance Tuner korrekt auf einen kleinen Wert eingestellt haben, z. B. 30 Sekunden.

Entfernen von Code verwalten

Google.Protobuf.dll nutzt Reflexion. Dabei wird möglicherweise ein Teil des erforderlichen Codes entfernt. Um eine solche Entfernung zu vermeiden, enthält das Plug-in die Datei link.xml mit Informationen darüber, welche Symbole beibehalten werden sollen. Wenn Sie Funktionen von protobuf benötigen, die Reflexion verwenden, und Code-Striping aktiviert haben, fügen Sie diese Informationen in die Datei link.xml ein, um die Symbole beizubehalten.

Weitere Informationen zum Entfernen von verwaltetem Code finden Sie in der Dokumentation zu Unity.

Wenn Sie alle Symbole in protobuf beibehalten müssen, fügen Sie Ihrem Projekt eine link.xml-Datei hinzu, die Folgendes enthält:

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

Ahead-of-Time-Compilation (AOT)

Eine vorzeitige Kompilierung ist für das IL2CPP-Back-End und die Unity-Versionen 2017 und 2018 erforderlich (aber nicht für spätere Versionen von Unity).

Der AOT-Compiler generiert möglicherweise keinen Code für generische Methoden. Sie müssen den Compiler erzwingen, den richtigen für protobuf erforderlichen Code zu generieren, indem Sie die folgende Methode hinzufügen:

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

Weitere Informationen zu Scripteinschränkungen finden Sie in der Unity-Dokumentation.