ПрофильУстановщик

Позволяет библиотекам заранее заполнять трассировки компиляции для чтения ART.
Последнее обновление Стабильный выпуск Релиз-кандидат Бета-версия Альфа-релиз
7 августа 2024 г. 1.3.1 - - 1.4.0-альфа02

Объявление зависимостей

Чтобы добавить зависимость от ProfileInstaller, необходимо добавить в свой проект репозиторий Google Maven. Для получения дополнительной информации прочтите репозиторий Google Maven .

Добавьте зависимости для нужных вам артефактов в файл build.gradle для вашего приложения или модуля:

классный

dependencies {
    implementation "androidx.profileinstaller:profileinstaller:1.3.1"
}

Котлин

dependencies {
    implementation("androidx.profileinstaller:profileinstaller:1.3.1")
}

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

Обратная связь

Ваши отзывы помогают сделать Jetpack лучше. Дайте нам знать, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете добавить свой голос к существующей проблеме, нажав кнопку со звездочкой.

Создать новую задачу

Дополнительную информацию см. в документации по системе отслеживания проблем .

Версия 1.4

Версия 1.4.0-альфа02

7 августа 2024 г.

Выпущен androidx.profileinstaller:profileinstaller:1.4.0-alpha02 . Версия 1.4.0-alpha02 содержит эти коммиты .

Новые возможности

  • В установщик профилей добавлена ​​поддержка API 35. ( 6f9f6fa )

Исправление ошибок

  • Убрано ручное определение доступа к API новой платформы, поскольку это происходит автоматически посредством моделирования API при использовании R8 с AGP 7.3 или новее (например, R8 версии 3.3) и для всех сборок при использовании AGP 8.1 или новее (например, D8 версии 8.1). Клиентам, не использующим AGP, рекомендуется выполнить обновление до D8 версии 8.1 или более поздней. Более подробную информацию можно найти в этой статье . ( If6b4c , b/345472586 )

Версия 1.4.0-альфа01

7 февраля 2024 г.

Выпущен androidx.profileinstaller:profileinstaller:1.4.0-alpha01 . Версия 1.4.0-alpha01 содержит эти коммиты.

Исправление ошибок

  • Добавлен код ошибки, связанный с отсутствием профиля, встроенного в средство проверки профиля. ( Ifb109 , б/313928520 )
  • Исправлен сбой при сбросе шейдеров на Android U (API 34), а также на эмуляторах. ( I031ca , б/274314544 )
  • Включена поддержка Android U в установщике профиля. ( Iaf177 )
  • Исправлена ​​ошибка установщика профиля на Android U из-за того, что текущий профиль не создавался пустым при запуске процесса. ( Ie3899 )
  • Исправлено перекодирование растрового изображения метода в формате профиля V_015S . ( aosp/2906631 ) и ( aosp/2847740 )

Версия 1.3

Версия 1.3.1

3 мая 2023 г.

androidx.profileinstaller:profileinstaller:1.3.1 выпущен. Версия 1.3.1 содержит эти коммиты.

Исправление ошибок

  • Включена поддержка Android U в установщике профиля ( Iaf177 ).
  • Исправлена ​​ошибка установщика профиля на Android U из-за того, что текущий профиль не создавался пустым при запуске процесса. ( Ie3899 )

Версия 1.3.0

22 марта 2023 г.

Выпущен androidx.profileinstaller:profileinstaller:1.3.0 . Версия 1.3.0 содержит эти коммиты.

Важные изменения с версии 1.2.0

  • Исправлено исключение NullPointerException в ProfileInstallReceiver . ( б / 243851384 )
  • Добавлен API ProfileVerifier для проверки из приложения, был ли базовый профиль скомпилирован, запланирован или отсутствует ( I263a4 , b/246653809 ).
  • Добавляет новую трансляцию оболочки, которая позволяет Macrobenchmark полностью сбрасывать данные профиля из памяти на диск для включения в создание базового профиля. Это необходимо для использования библиотеки макротестов для захвата базовых профилей с помощью BaselineProfileRule и оценки производительности профиля с помощью CompilationMode.Partial(warmupIterations) .
  • Добавлен диагностический код для обнаружения сжатых базовых профилей. Сжатые базовые профили не могут быть установлены с помощью Profileinstaller в Macrobenchmarks или в рабочей среде из-за нагрузки на ЦП, и их следует избегать при создании приложения путем обновления до Studio/AGP Electric Eel или bundletool версии 1.13.1 ( I86413 , b/261998144 ).
  • Добавлены перехватчики макробенчмарка для захвата профилей и удаления кэша шейдеров, которые необходимы для создания базовых профилей или макробенчмаркинга на нерутированных устройствах ( Ie0a7d , b/250083467 , b/253094958 ) ( Ia5171 , b/231455742 ).

Версия 1.3.0-rc01

8 марта 2023 г.

androidx.profileinstaller:profileinstaller:1.3.0-rc01 выпущен без изменений со времени последней бета-версии. Версия 1.3.0-rc01 содержит эти коммиты.

Версия 1.3.0-бета01

8 февраля 2023 г.

Выпущен androidx.profileinstaller:profileinstaller:1.3.0-beta01 . Версия 1.3.0-beta01 содержит эти коммиты.

Изменения API

  • Удалена поддержка обработки сжатых профилей — открытие и распаковка приводит к снижению загрузки ЦП на 10 мс во время запуска, поэтому вместо этого добавлена ​​диагностика для обнаружения неправильно сжатых базовых профилей. ( I86413 , б / 261998144 )

Версия 1.3.0-альфа03

11 января 2023 г.

androidx.profileinstaller:profileinstaller:1.3.0-alpha03 выпущен. Версия 1.3.0-alpha03 содержит эти коммиты.

Исправление ошибок

  • Позволяет обрабатывать сжатые или несжатые базовые профили ( Ic61a0 ).
  • Исправьте MacrobenchmarkScope.dropShaderCache() , чтобы он больше не выходил из строя, исправив реестр широковещательной рассылки в манифесте Profileinstaller ( I5c728 , b/258619948 ).

Версия 1.3.0-альфа02

9 ноября 2022 г.

Выпущен androidx.profileinstaller:profileinstaller:1.3.0-alpha02 . Версия 1.3.0-alpha02 содержит эти коммиты.

Изменения API

  • Добавлена ​​возможность для тестов для удаления кэша шейдеров, чтобы обеспечить стабильную производительность при холодном запуске, особенно при компиляции с профилями из итераций прогрева. Это обновление необходимо для измерения холодных запусков с использованием benchmark-macro-junit4:1.2.0-alpha05 или более поздней версии. Информацию об изменениях API библиотеки Benchmark можно найти на странице Benchmark 1.2.0-alpha07 . ( Я5171 , б/231455742 )

Версия 1.3.0-альфа01

24 октября 2022 г.

Выпущен androidx.profileinstaller:profileinstaller:1.3.0-alpha01 . Версия 1.3.0-alpha01 содержит эти коммиты.

Изменения API

  • Добавлен API ProfileVerifier для проверки из приложения, был ли базовый профиль скомпилирован, запланирован или отсутствует ( I263a4 , b/246653809 ).
  • Добавляет новую трансляцию оболочки, которая позволяет Macrobenchmark полностью сбрасывать данные профиля из памяти на диск для включения в создание базового профиля. Это необходимо для использования библиотеки макротестов для захвата базовых профилей с помощью BaselineProfileRule и оценки производительности профиля с помощью CompilationMode.Partial(warmupIterations) . ( Ie0a7d , б/250083467 , б/253094958 )

Версия 1.2.2

Версия 1.2.2

11 января 2023 г.

androidx.profileinstaller:profileinstaller:1.2.2 выпущен. Версия 1.2.2 содержит эти коммиты.

Исправление ошибок

  • Позволяет обрабатывать сжатые или несжатые базовые профили ( Ic61a0 ).

Версия 1.2.1

Версия 1.2.1

7 декабря 2022 г.

androidx.profileinstaller:profileinstaller:1.2.1 выпущен. Версия 1.2.1 содержит эти коммиты.

Новые возможности

  • Включите установщик профилей для S_V2 (API 32) и TIRAMISU (API 33) ( b/254900303 ).

Версия 1.2.0

Версия 1.2.0

27 июля 2022 г.

androidx.profileinstaller:profileinstaller:1.2.0 выпущен. Версия 1.2.0 содержит эти коммиты.

Важные изменения с версии 1.1.0

  • Добавлена ​​поддержка формата профиля ART, используемого в Android 12 и в дальнейшем.
  • Добавьте новые API в ProfileInstallReceiver , чтобы получить более согласованные результаты с помощью Macrobenchmarks при использовании базовых профилей.

Версия 1.2.0-rc01

15 июня 2022 г.

androidx.profileinstaller:profileinstaller:1.2.0-rc01 выпущен. Версия 1.2.0-rc01 содержит эти коммиты.

  • Эта версия идентична androidx.profileinstaller:profileinstaller:1.2.0-beta03 .

Версия 1.2.0-бета03

1 июня 2022 г.

Выпущен androidx.profileinstaller:profileinstaller:1.2.0-beta03 . Версия 1.2.0-beta03 содержит эти коммиты.

Версия 1.2.0-бета02

18 мая 2022 г.

Выпущен androidx.profileinstaller:profileinstaller:1.2.0-beta02 . Версия 1.2.0-beta02 содержит эти коммиты.

  • Никаких изменений не требуется для поддержки версий Compose 1.2.0-beta02.

Версия 1.2.0-бета01

11 мая 2022 г.

Выпущен androidx.profileinstaller:profileinstaller:1.2.0-beta01 . Версия 1.2.0-beta01 содержит эти коммиты.

Изменения API

  • Добавьте новые API в ProfileInstallReceiver , чтобы получить более согласованные результаты с помощью Macrobenchmarks при использовании базовых профилей. ( If2ae5 , b/215740637 )

Исправление ошибок

  • Установщик профиля выдает полезное сообщение при попытке использовать формат метаданных V_001 на Android 12 и более поздних версиях. ( аосп/1978526 , б/217502387 )
  • Установщик профилей теперь использует androidx.startup версии 1.1.1 . ( аосп/2077099 , б/229828376 )

Версия 1.2.0-альфа02

26 января 2022 г.

Выпущен androidx.profileinstaller:profileinstaller:1.2.0-alpha02 . Версия 1.2.0-alpha02 содержит эти коммиты.

Эта версия идентична 1.2.0-alpha01 .

Версия 1.2.0-альфа01

12 января 2022 г.

androidx.profileinstaller:profileinstaller:1.2.0-alpha01 выпущен. Версия 1.2.0-alpha01 содержит эти коммиты.

Новые возможности

  • Добавьте поддержку формата профиля ART, используемого в Android 12 и в дальнейшем.

Версия 1.1.0

Версия 1.1.0

9 февраля 2022 г.

androidx.profileinstaller:profileinstaller:1.1.0 выпущен. Версия 1.1.0 содержит эти коммиты.

Версия 1.1.0-rc01

15 декабря 2021 г.

androidx.profileinstaller:profileinstaller:1.1.0-rc01 выпущен без обновлений с версии 1.1.0-beta04. Версия 1.1.0-rc01 содержит эти коммиты.

Версия 1.1.0-beta04

1 декабря 2021 г.

Выпущен androidx.profileinstaller:profileinstaller:1.1.0-beta04 . Версия 1.1.0-beta04 содержит эти коммиты.

Версия 1.1.0-beta03

17 ноября 2021 г.

androidx.profileinstaller:profileinstaller:1.1.0-beta03 выпущен. Версия 1.1.0-beta03 содержит эти коммиты.

Исправление ошибок

  • Обновлено для поддержки Compose 1.1.0-beta03.

Версия 1.1.0-beta02

3 ноября 2021 г.

Выпущен androidx.profileinstaller:profileinstaller:1.1.0-beta02 . Версия 1.1.0-beta02 содержит эти коммиты.

Исправление ошибок

  • Обновлено для поддержки Compose 1.1.0-beta02.

Версия 1.1.0-бета01

27 октября 2021 г.

Выпущен androidx.profileinstaller:profileinstaller:1.1.0-beta01 . Версия 1.1.0-beta01 содержит эти коммиты.

  • Никаких изменений с версии 1.1.0-alpha07.

Версия 1.1.0-альфа07

13 октября 2021 г.

androidx.profileinstaller:profileinstaller:1.1.0-alpha07 выпущен. Версия 1.1.0-alpha07 содержит эти коммиты.

Новые возможности

  • Добавлена ​​поддержка проф на Android N

Версия 1.1.0-альфа06

29 сентября 2021 г.

Выпущен androidx.profileinstaller:profileinstaller:1.1.0-alpha06 . Версия 1.1.0-alpha06 содержит эти коммиты.

Исправление ошибок

  • Исправлены проблемы с перекодированием Profileinstaller на N, O и O_MR1. ( I12d75 )

Версия 1.1.0-альфа05

15 сентября 2021 г.

androidx.profileinstaller:profileinstaller:1.1.0-alpha05 выпущен. Версия 1.1.0-alpha05 содержит эти коммиты.

Исправление ошибок

  • Исправлено перекодирование профилей Android Nougat и Android Oreo для APK-файлов Multidex.

Версия 1.1.0-альфа04

1 сентября 2021 г.

androidx.profileinstaller:profileinstaller:1.1.0-alpha04 выпущен. Версия 1.1.0-alpha04 содержит эти коммиты.

Исправление ошибок

  • Исправьте ProfileInstaller , чтобы приложениям, использующим базовые профили, было проще запускать MacroBenchmarks с помощью CompilationMode.BaselineProfile . ( I42657 , б/196074999 )

Версия 1.1.0-альфа03

18 августа 2021 г.

androidx.profileinstaller:profileinstaller:1.1.0-alpha03 выпущен. Версия 1.1.0-alpha03 содержит эти коммиты.

Исправление ошибок

  • Измените поведение пропуска профиля, чтобы записать PackageInfo.lastUpdatedTime в файл в каталоге файлов приложения и сравнить его перед установкой профиля при следующем запуске. ( Ib93d1 )
  • Настройте формат профиля на устройствах P, Q, R в соответствии с требованиями ART ( I84e89 ).

Версия 1.1.0-альфа02

4 августа 2021 г.

androidx.profileinstaller:profileinstaller:1.1.0-alpha02 выпущен. Версия 1.1.0-alpha02 содержит эти коммиты.

Обновлен для совместимости с Compose 1.1.0-alpha01.

Версия 1.1.0-альфа01

21 июля 2021 г.

androidx.profileinstaller:profileinstaller:1.1.0-alpha01 выпущен. Версия 1.1.0-alpha01 содержит эти коммиты.

Исправление ошибок

  • Исправлена ​​ошибка, приводившая в некоторых случаях к срабатыванию строгого режима.

Версия 1.0

Версия 1.0.4

13 октября 2021 г.

Выпущен androidx.profileinstaller:profileinstaller:1.0.4 . Версия 1.0.4 содержит эти коммиты.

  • Обновлено для поддержки Compose 1.0.4.

Версия 1.0.3

29 сентября 2021 г.

androidx.profileinstaller:profileinstaller:1.0.3 выпущен. Версия 1.0.3 содержит эти коммиты.

  • Обновлено для поддержки Compose 1.0.3.

Версия 1.0.2

1 сентября 2021 г.

Выпущен androidx.profileinstaller:profileinstaller:1.0.2 . Версия 1.0.2 содержит эти коммиты.

Исправление ошибок

  • Добавлено перекодирование профилей для устройств P, Q, R. Это изменение означает, что эти устройства будут перекодировать профиль, гарантируя, что записанный профиль всегда будет доступен для использования ART. Раньше на этих платформах перекодирование пропускалось, что иногда приводило к тому, что ART не могла обработать исходный профиль. Никаких изменений в API разработчика.

Версия 1.0.1

4 августа 2021 г.

Выпущен androidx.profileinstaller:profileinstaller:1.0.1 . Версия 1.0.1 содержит эти коммиты.

Обновлен для совместимости с Compose 1.0.1.

Версия 1.0.0

28 июля 2021 г.

androidx.profileinstaller:profileinstaller:1.0.0 выпущен. Версия 1.0.0 содержит эти коммиты.

Основные особенности версии 1.0.0

Установщик профилей — это новая библиотека, которая позволяет библиотекам и приложениям определять «Правила профиля» и объединять информацию профиля ART с APK, и эта библиотека установит эти профили после запуска приложения. Это можно использовать для повышения производительности приложений.

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

Версия 1.0.0-rc02

14 июля 2021 г.

androidx.profileinstaller:profileinstaller:1.0.0-rc02 выпущен. Версия 1.0.0-rc02 содержит эти коммиты.

Версия 1.0.0-rc01

1 июля 2021 г.

androidx.profileinstaller:profileinstaller:1.0.0-rc01 выпущен. Версия 1.0.0-rc01 содержит эти коммиты.

Это RC-релиз без изменений по сравнению с бета-версией.

Версия 1.0.0-бета01

16 июня 2021 г.

androidx.profileinstaller:profileinstaller:1.0.0-beta01 выпущен. Версия 1.0.0-beta01 содержит эти коммиты.

Назначение библиотеки

Установщик профилей — это новая библиотека, которая позволяет библиотекам и приложениям определять «Правила профиля» и объединять информацию профиля ART с APK, и эта библиотека установит эти профили после запуска приложения. Это можно использовать для повышения производительности приложений.

Установка этого профиля выполняется с помощью библиотеки androidx.startup. Если по какой-либо причине вы хотите отключить установку профиля, они могут изменить манифест, чтобы удалить его:


       <provider
           android:name="androidx.startup.InitializationProvider"
           android:authorities="${applicationId}.androidx-startup"
           android:exported="false"
           tools:node="merge">
           <meta-data android:name="androidx.profileinstaller.ProfileInstallerInitializer"
                     tools:node="remove" />
       </provider>

Это особенно полезно, если у вашего приложения нетривиальные требования к запуску и вы хотите запустить установку профиля вручную с помощью API ProfileInstaller.writeProfile .

Что такое правила профиля?

  • Правила профиля для библиотеки указаны в текстовом файле baseline-prof.txt расположенном в каталоге src/main или его эквиваленте. В файле указывается правило для каждой строки, где правило в данном случае представляет собой шаблон для сопоставления с методами или классами в библиотеке. Синтаксис этих правил представляет собой расширенный набор удобочитаемого формата профиля ART, который используется при использовании adb shell profman --dump-classes-and-methods ... . Эти правила принимают одну из двух форм и ориентированы либо на методы, либо на классы.

  • Правило метода будет иметь следующий шаблон:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • И правило класса будет иметь следующий шаблон:

    <CLASS_DESCRIPTOR>
    
  • Здесь <FLAGS> — это один или несколько символов H , S и P , указывающие, следует ли пометить этот метод как «Горячий», «Запуск» или «После запуска».

  • <CLASS_DESCRIPTOR> — это дескриптор класса, которому принадлежит целевой метод. Например, класс androidx.compose.runtime.SlotTable будет иметь дескриптор Landroidx/compose/runtime/SlotTable; .

  • <METHOD_SIGNATURE> является сигнатурой метода и включает имя, типы параметров и типы возвращаемых значений метода. Например, метод fun isPlaced(): Boolean в LayoutNode имеет подпись isPlaced()Z .

  • Эти шаблоны могут содержать подстановочные знаки ( ** , * и ? ), чтобы одно правило охватывало несколько методов или классов.

Что делают правила?

  • Метод с флагом H указывает, что этот метод является «горячим» и его следует скомпилировать заранее.

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

  • Метод с флагом P указывает, что это метод, который вызывается после запуска.

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

Как это работает?

  • Библиотеки могут определять эти правила, которые будут упакованы в артефакты AAR. Когда затем создается APK, включающий эти артефакты, эти правила объединяются, и объединенные правила используются для создания компактного двоичного профиля ART, специфичного для APK. Затем ART может использовать этот профиль при установке APK на устройствах, чтобы заранее скомпилировать определенное подмножество приложения и повысить производительность приложения, особенно при первом запуске. Обратите внимание, что это не повлияет на отлаживаемые приложения.

  • Файлы правил должны называться baseline-prof.txt и размещаться в корневом каталоге вашего основного набора исходного кода (это должен быть родственный файл вашему файлу AndroidManifset.xml ).

  • В настоящее время эти файлы будут использоваться только в том случае, если вы используете Android Gradle Plugin 7.0+ и в настоящее время включены только с помощью флага в вашем gradle.properties :

    # Enable adding baseline-prof.txt files to AAR artifacts, and binary profiles to APKs
    android.experimental.enableArtProfiles=true
    

Профили требуют баланса

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