Профилирование Проекта Unity С Помощью Android Studio

Всем добрый день! Эта статья о том, как профилировать игры Unity на Android с помощью Android Studio. Я расскажу о том, как настроить Android Studio и получить максимальный объем данных.

Вопросы анализа и выводы на основе полученных результатов выходят за рамки данной статьи.



Требования

Чтобы полностью профилировать приложение, вам понадобится телефон с Android 8 или более поздней версии (API 27).

По опыту, профилирование в старых версиях Android — это больше приключений, чем того стоит. По этой причине я рекомендую приобрести полную линейку устройств Nexus, поскольку у них более старое оборудование и последние обновления Android.

Настройка проекта Unity

Чтобы получить результат, вам придется определенным образом настроить проект Unity.

Настройки в настройках сборки



Профилирование проекта Unity с помощью Android Studio

  • Прежде всего, необходимо переключиться Система сборки В "Грейдл" и поставьте галочку рядом с ним «Экспортный проект» .

    Таким образом мы получим готовый проект Android Studio, который в дальнейшем профилируем.

    Профилирование готового APK также возможно, но оно более ограничено и требует дополнительной подготовки.

  • Режим «Развитие строительства» желательно его отключить, так как таким образом результирующие тайминги в профайлере будут максимально приближены к реальным


Настройки в настройках плеера



Профилирование проекта Unity с помощью Android Studio

  • Установить Скриптовый бэкэнд В IL2CPP .

    Если мы оставим Mono, то при нативном профилировании мы увидим множество функций Mono, без информации о том, как они связаны с кодом C#.

  • Вариант «Конфигурация компилятора C++» для Android это не имеет никакого эффекта (в Unity 2018.3).

    Вы можете установить для него значение «Release», возможно, в будущих версиях набора инструментов Unity для Android этот параметр повлияет на настройки компилятора.

  • Целесообразно ограничить «Целевая архитектура» до ARMv7 .

    Таким образом вы сэкономите время компиляции, а по опыту многие архитектуры иногда путают Android Studio.

  • Также стоит установить ряд дополнительных настроек:
    • Место установки — «Предпочитать внешний»
    • Доступ в Интернет – «Требуется»
    • Разрешение на запись — «Внешнее (SDCard)»
    Android Studio и другие профилировщики используют simpleperf для сбора статистики, и для записи временных файлов ей потребуется доступ к карте памяти.



Подготовка проекта Gradle

После того, как вы установили все настройки, создайте проект Unity. Вы должны получить папку с проектом Gradle.

Профилирование проекта Unity с помощью Android Studio

Unity по умолчанию собирает проект на основе того, что вы планируете собрать из него окончательный APK. Поэтому из него была удалена вся отладочная информация, но ее, к счастью, можно вернуть.

Для этого нужно заменить libil2cpp.so и libunity.so на версии с отладочной информацией.



libil2cpp.so

Это файл, содержащий весь код C++, сгенерированный IL2CPP на основе вашего кода C#.

Unity генерирует всю необходимую для профилирования информацию, но для оптимизации размера APK вырезает ее в процессе сборки.

Чтобы вернуть его:

  • Перейдите в папку вашего проекта
  • Найдите его в подпапке Температура и перейдите в подпапку Temp/StagingArea/символы/armeabi-v7a
  • Найдите в нем 'libil2cpp.so.debug' .

    Это версия libil2cpp.so с отладочной информацией.

  • Теперь перейдите в проект Gradle и найдите в нем папку '\src\main\jniLibs\armeabi-v7a'
  • Заменять 'libil2cpp.so' файл 'libil2cpp.so.debug'


libunity.so

Это файл, содержащий низкоуровневую часть Unity Player. Поскольку мы делаем сборку Release, Unity включила в ваш проект файл без отладочной информации.

Вам необходимо заменить libunity.so файлом символов.

  • Перейдите в папку, в которой у вас установлен Unity.
  • Перейти в папку "\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Development\Libs\armeabi-v7a\"
  • Возьмите файл оттуда libunity.so и замените файл в вашем проекте, который находится в папке '\src\main\jniLibs\armeabi-v7a'


Профилирование

Теперь вы можете начать профилирование в Android Studio, просто нажмите кнопку запуска профилировщика.



Профилирование проекта Unity с помощью Android Studio

Android Studio запустит приложение и начнет сеанс профилирования.



Профилирование проекта Unity с помощью Android Studio

По умолчанию Android Studio отображает графики, но не выполняет выборку данных.

Чтобы запустить процесс, вам нужно нажать на дорожку ЦП, чтобы профилировщик переключился на представление ЦП.

При этом в верхней части окна появится раскрывающийся список и кнопка «Запись».



Профилирование проекта Unity с помощью Android Studio

Выберите «Собственный вариант» (в Android Studio 3.3 — C/C++ Native) и нажмите кнопку «Запись».

Так как запись производится на диск устройства, по опыту лучше не записывать более 5-8 секунд; многие устройства выйдут из строя даже при меньшем объёме данных (см.

список протестированных устройств в конце статьи).

Чтобы получить результат, нажмите «Стоп», а затем красный квадрат, чтобы завершить сеанс.

Трудно понять замысел авторов, но если не остановить запись полностью, профайлер не всегда начнет анализировать полученные данные и ваш сегмент с данными уйдет в отдаленные места.



Профилирование проекта Unity с помощью Android Studio

После этого вам останется только немного подождать, через 30-50 секунд профайлер выдаст вам результат. Если все настроено правильно, вы получите захват со всеми названиями функций.



Профилирование проекта Unity с помощью Android Studio



Примечательные особенности

  • Наиболее стабильные результаты можно получить на рутированных устройствах.

  • Не используйте Samsung, у них много наворотов безопасности, которые мешают отладке.

  • Во многих местах ваш стек вызовов будет включать такие функции, как «kernel.kptr + адрес».

    Это вызовы внутри ядра Android, защищенные политиками безопасности.

    На рутованном устройстве вы можете отключить защиту:

    • Запустите `adb Shell`
    • Запустите `su`, чтобы получить root-права
    • Запустите 'sysctl -w kernel.kptr_restrict=0' — это снимет защиту с ядра.

    • [!] После завершения отладки запустите «sysctl -w kernel.kptr_restrict=1».

      В противном случае некоторые устройства не смогут загрузить ОС после перезагрузки.

      Во многих случаях вылечить можно только прошивкой чистого ядра.

  • Если Android Studio часто дает сбой, вы можете попробовать увеличить кучу виртуальной машины Java:
    • 2Гб — для проектов среднего размера ('-Xmx2g')
    • 4Gb — для больших проектов ('-Xmx4g')
  • На нерутированных устройствах иногда переключение ядра в «разрешительный режим» улучшает ситуацию.

    • Запустите команду «adbshell setenforce 0».



Специфика Unity

  • Основной поток Unity называется UnityMain, но при профилировании вы можете увидеть несколько UnityMain. Это пользовательские потоки, которые вы создаете внутри своего кода C#.

    По умолчанию они получают одно и то же имя.

    Основной поток Unity обычно легко определить, поскольку это самый загруженный поток.

  • Графический поток называется UnityGfxWorkerW.
  • Системные потоки Unity Job называются Worker Thread.
  • К сожалению, некоторые функции ожидания, которые использует Unity (фьютекс), отображаются и учитываются Android Studio не как время ожидания, а как активность.

  • Когда вы смотрите на график вызовов в представлении «Сверху вниз», вам придется пройти множество уровней вызова Java; к сожалению, это никак нельзя отфильтровать в Android Studio.


Профилирование проекта Unity с помощью Android Studio



Рекомендуемые устройства

Для экспериментов мы использовали следующие устройства:
  • Самсунг Галакси С8
  • Гугл Пиксель 2XL
  • Google Пиксель
  • Сони Иксперия ХА1
  • Хуавей Хонор 7
  • Хуавей Нексус 6П
  • Мото G5P
  • Асус Нексус 7 (2013 г.

    )

Все устройства были рутированы, для Huawei Nexus 6P мы собрали ядро и АОСП .

По итогам наиболее безотказными и простыми в работе оказались Google и Sony. У Sony есть отличный сайт для разработчиков — Открытые устройства .

Huawei больше не позволяет легко разблокировать устройства; У Samsung постоянные трудности с дополнительными уровнями защиты.

Moto G5P часто приводил к сбою в процессе сбора данных профилировщика (simpleperf).

Теги: #Разработка Android #Разработка мобильных приложений #unity #Android Studio #unity3d #andriod

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.