На этой странице описывается, как инициализировать библиотеку в коде игры и проверить, загружает ли она данные в 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 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 минут), чтобы игра не отправляла слишком много запросов к API, что особенно важно для пользователей без безлимитного тарифного плана. Большой интервал также позволяет избежать чрезмерного расхода заряда батареи устройства.
Чтобы убедиться, что интервал установлен на 30 секунд, выполните следующие действия:
- Для доступа к настройкам выберите Google > Android Performance Tuner .
- Выберите вкладку «Настройки инструментария» и нажмите «Использовать дополнительные настройки» .
- Убедитесь, что поле Интервалы (минуты) содержит значение 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.