Comments 16
Графики из android vitals? Прирост на всех устройствах и версиях?
Графики из Firebase Performance, app_start событие. Устройства и версии мы не отслеживали отдельно, но по графикам видно улучшение
А в play console android vitals на cold start значения уменьшились?
Мы не опирались на значение Android Vitals, потому что они оказались нерепрезентативными для нас. Там показываются не все холодные запуски, а только медленные холодные запуски, и для нашей небольшой аудитории графики рисуются рваные
Уберите из проекта Firebase Performance и получите ещё прирост.
Я вдруг понял, что ничего не понимаю...
Очень-очень тупой вопрос: когда я скачиваю exe на компьютер он же уже скомпилированный? Я запускаю бинарник и работаю.
На андроид не так? Приложение компилируется на конечном устройстве?
На андроид не так, как с .exe
Для приложений на Android исходный код программы компилируется в байт-код, который затем выполняется на виртуальной машине. При установке приложения на устройство Android, APK-файл с байт-кодом приложения загружается на устройство, и затем байт-код выполняется на самом устройстве.
Сам процесс компиляции будет зависеть от типа виртуальной машины и какой тип компилятора используется
Если это, например, ART и используется чистая AOT-компиляция, то весь код приложения будет скомпилирован в процессе установки его на устройство, то есть буквально на конечном устройстве, как вы и говорите
Если другой тип компилятора, то в мелочах по другому, это в статье я описал :)
.exe файлы могут быть не скомпилированными. Например .NET приложение, написанное на C# можно засунуть в exe, но внутри будет код MSIL, который потом тоже надо будет интерпретировать в рантайме.
(тут был мой случайный комментарий, его не удалить мне)
Спасибо, было полезно узнать что то новое для себя)
Отличная статья, огромное спасибо!
Пара вопросов, если можно:
Какой прирост скорости получился при использовании продвинутого сценария?
Проверяли ли вы что может произойти если например поменяется флоу экранов на старте, для которого сгенерирован baseline profile, но при этом не будет актуализирован код в BaselineProfileGenerator? В таком случае просто не сработает оптимизация или может быть какое то неконсистентное состояние или креш?
Спасибо, рад, что статья понравилась :)
При использовании продвинутого сценария время старта приложения особо не меняется, но приложение будет само первоначально работать быстрее при прохождении описанного пути. Мы это не замеряли, верили гуглу, что так и надо делать
Если я правильно понял вопрос, то если будет рассинхрон между тем, что содержится в baseline profile от актуального флоу экранов, то, если я правильно понимаю из презентации с Google I/O, оптимизация не сработает для тех участков кода, которые не содержатся в профиле. Там такой механизм, что скомпиленный код из профилей в файлах .odex комбинируется с байткодом из .dex файлов, и оно применяется на старте. Если эти скомпилированные куски оказались не нужны, то и импакта на производительность в этом случае будет мало.
Спасибо за статью! У меня вопрос, а как делать продвинутый сценарий, если есть авторизация с вводом смс?
Если это считай прод приложение, то подмокать пользователя нет возможности..
Спасибо за вопрос!
Для генерации нашего бейзлайна мы используем отдельный build type
– с обфускацией, как релиз, но все запросы будут ходить на дев стенд. И можно запускать Baseline Generator на нем, используя пользователей с дев окружения.
Если не хочется build type
, можно сделать специального пользователя на проде.
Лично у нас есть такой, и при авторизации в которого СМС не отправляется и код всегда один. Возможно, получится договориться с вашими бекендерами для создания такой тестовой учетки :)
Кстати тестовый аккаунт на проде очень часто требуется для тестировщиков в сторах при публикации, чтобы они проверяли авторизованную часть приложения на соответствие их правил. В App Gallery, например, это обязательное условие, насколько я знаю.
Как мы на 20% повысили скорость запуска приложения с помощью Baseline Profiles