Инициализируйте библиотеку и проверьте работу

На этой странице описано, как инициализировать библиотеку в коде игры и убедиться, что она загружает данные в 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 и когда данные телеметрии были загружены в API консоли Google Play. Позже вы найдете эти утверждения в журнале, чтобы убедиться, что плагин работает правильно.

Поздняя инициализация (только 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 минут), чтобы игра не отправляла слишком много запросов к API, что особенно важно для пользователей, у которых нет тарифного плана для мобильных данных. включая неограниченные данные. Большой интервал также позволяет избежать чрезмерного использования аккумулятора устройства.

Чтобы убедиться, что интервал установлен на 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

Если вы допустили ошибку при настройке плагина, например забыли установить ключ 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 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 с информацией о том, какие символы следует сохранить. Если вам нужны некоторые функции protobuf, использующие отражение, и у вас включено удаление кода, добавьте эту информацию в файл link.xml , чтобы сохранить символы.

Подробнее об удалении управляемого кода можно прочитать в документации Unity.

Если вам нужно сохранить все символы в protobuf, добавьте в проект файл link.xml , содержащий следующее:

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

Предварительная компиляция (AOT)

Предварительная компиляция требуется для серверной части IL2CPP и версий Unity 2017 и 2018 (но не для более поздних версий Unity).

Компилятор AOT может не создавать код для универсальных методов. Вам нужно заставить компилятор сгенерировать правильный код, необходимый для 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.