ProfileInstaller
最新更新 | 稳定版 | 候选版本 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2024 年 10 月 2 日 | 1.4.1 | - | - | - |
声明依赖项
要添加对 ProfileInstaller 的依赖项,您必须将 Google Maven 存储库添加到您的项目中。阅读Google 的 Maven 存储库以获取更多信息。
在应用或模块的 build.gradle
文件中添加所需工件的依赖项
Groovy
dependencies { implementation "androidx.profileinstaller:profileinstaller:1.4.1" }
Kotlin
dependencies { implementation("androidx.profileinstaller:profileinstaller:1.4.1") }
有关依赖项的更多信息,请参阅添加构建依赖项。
反馈
您的反馈有助于改进 Jetpack。如果您发现新问题或有改进此库的想法,请告诉我们。在创建新问题之前,请查看此库中现有的问题。您可以通过点击星形按钮为现有问题添加您的投票。
有关更多信息,请参阅问题跟踪器文档。
版本 1.4
版本 1.4.1
2024 年 10 月 2 日
androidx.profileinstaller:profileinstaller:1.4.1
已发布。版本 1.4.1 包含这些提交。
错误修复
- 通过按顺序为多个进程发出信号,修复了对多进程基线配置文件记录的支持。此修复程序需要在您的 macrobenchmark/基线配置文件模块中更新到
androidx.benchmark:benchmark-macro:1.4.0-alpha02
以及在应用中更新到androidx.profileinstaller:profileinstaller:1.4.1
。(I0f519,b/366231469)
版本 1.4.0
2024 年 9 月 18 日
androidx.profileinstaller:profileinstaller:1.4.0
已发布。版本 1.4.0 包含这些提交。
自 1.3.0 以来的重要更改
ProfileInstaller
现在支持在 API 35 及更高版本上捕获/安装配置文件。平台版本更新不再需要更新ProfileInstaller
。(6f9f6fa)- 修复了在 Android U (API 34) 和模拟器上丢弃着色器时发生的崩溃问题。(I031ca,b/274314544)
- 修复了
V_015S
配置文件格式中的方法标志转码问题。(aosp/2906631,aosp/2847740)
版本 1.4.0-rc01
2024 年 9 月 4 日
androidx.profileinstaller:profileinstaller:1.4.0-rc01
发布,与上次 Beta 版本相比没有变化。版本 1.4.0-rc01 包含 这些提交。
版本 1.4.0-beta01
2024 年 8 月 21 日
androidx.profileinstaller:profileinstaller:1.4.0-beta01
发布,与上次 Alpha 版本相比没有变化。版本 1.4.0-beta01 包含 这些提交。
版本 1.4.0-alpha02
2024 年 8 月 7 日
androidx.profileinstaller:profileinstaller:1.4.0-alpha02
发布。版本 1.4.0-alpha02 包含 这些提交。
新功能
- 为配置文件安装程序添加了 API 35 支持。(6f9f6fa)
错误修复
- 删除了手动概述对新平台 API 的访问,因为在使用 R8 和 AGP 7.3 或更高版本(例如 R8 版本 3.3)时,以及在使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)时,所有构建都会通过 API 建模自动执行此操作。建议未使用 AGP 的客户端更新到 D8 版本 8.1 或更高版本。有关更多详细信息,请参阅 本文。(If6b4c,b/345472586)
版本 1.4.0-alpha01
2024 年 2 月 7 日
androidx.profileinstaller:profileinstaller:1.4.0-alpha01
发布。版本 1.4.0-alpha01 包含这些提交。
错误修复
- 为配置文件验证程序添加了未嵌入配置文件的错误代码。(Ifb109,b/313928520)
- 修复了在 Android U (API 34) 和模拟器上丢弃着色器时发生的崩溃问题。(I031ca,b/274314544)
- 在配置文件安装程序中启用了对 Android U 的支持。(Iaf177)
- 修复了 Android U 上的配置文件安装程序由于进程启动时当前配置文件未创建为空而导致失败的问题。(Ie3899)
- 修复了
V_015S
配置文件格式中的方法位图转码问题。(aosp/2906631)和(aosp/2847740)
版本 1.3
版本 1.3.1
2023 年 5 月 3 日
androidx.profileinstaller:profileinstaller:1.3.1
发布。版本 1.3.1 包含这些提交。
错误修复
版本 1.3.0
2023 年 3 月 22 日
androidx.profileinstaller:profileinstaller:1.3.0
发布。版本 1.3.0 包含这些提交。
自 1.2.0 以来重要的更改
- 修复了
ProfileInstallReceiver
中的NullPointerException
。(b/243851384) - 添加了
ProfileVerifier
api 以在应用内检查基线配置文件是否已编译、计划或丢失(I263a4,b/246653809) - 添加了一个新的 shell 广播,使 Macrobenchmark 能够将内存中的配置文件数据完全刷新到磁盘,以包含在基线配置文件生成中。这需要使用 macrobenchmark 库来使用
BaselineProfileRule
捕获基线配置文件,并使用CompilationMode.Partial(warmupIterations)
评估配置文件性能。 - 添加了 诊断代码 以检测压缩的基线配置文件。由于 CPU 开销,压缩的基线配置文件无法由 Profileinstaller 在 Macrobenchmarks 或生产环境中安装,并且在使用 Studio/AGP Electric Eel 或
bundletool
版本1.13.1
构建应用时应避免。(I86413,b/261998144) - 为 macrobenchmark 添加了挂钩以捕获配置文件和丢弃着色器缓存,这对于在未root的设备上生成基线配置文件或进行宏基准测试是必需的(Ie0a7d,b/250083467,b/253094958)(Ia5171,b/231455742)
版本 1.3.0-rc01
2023 年 3 月 8 日
androidx.profileinstaller:profileinstaller:1.3.0-rc01
发布,自上次 Beta 版本以来没有变化。版本 1.3.0-rc01 包含这些提交。
版本 1.3.0-beta01
2023 年 2 月 8 日
androidx.profileinstaller:profileinstaller:1.3.0-beta01
发布。版本 1.3.0-beta01 包含这些提交。
API 更改
- 删除了对处理压缩配置文件的支持 - 打开和解压缩会导致启动期间 CPU 利用率下降 10 毫秒,因此改为添加了一个诊断程序以发现错误压缩的基线配置文件。(I86413,b/261998144)
版本 1.3.0-alpha03
2023 年 1 月 11 日
androidx.profileinstaller:profileinstaller:1.3.0-alpha03
发布。版本 1.3.0-alpha03 包含这些提交。
错误修复
- 启用对压缩或未压缩的基线配置文件的处理(Ic61a0)
- 修复
MacrobenchmarkScope.dropShaderCache()
以不再崩溃,方法是修复 profileinstaller 清单中的广播注册表(I5c728,b/258619948)
版本 1.3.0-alpha02
2022 年 11 月 9 日
androidx.profileinstaller:profileinstaller:1.3.0-alpha02
发布。版本 1.3.0-alpha02 包含这些提交。
API 更改
- 添加了一个挂钩,用于基准测试以丢弃着色器缓存,以确保冷启动的一致性能,尤其是在使用预热迭代中的配置文件编译时。此更新需要使用
benchmark-macro-junit4:1.2.0-alpha05
或更高版本来衡量冷启动。有关 Benchmark 库的 API 更改,请参阅 Benchmark 1.2.0-alpha07 页面。(Ia5171,b/231455742)
版本 1.3.0-alpha01
2022 年 10 月 24 日
androidx.profileinstaller:profileinstaller:1.3.0-alpha01
发布。版本 1.3.0-alpha01 包含这些提交。
API 更改
- 添加了
ProfileVerifier
api 以在应用内检查基线配置文件是否已编译、计划或丢失(I263a4,b/246653809) - 添加了一个新的 shell 广播,使 Macrobenchmark 能够将内存中的配置文件数据完全刷新到磁盘,以包含在基线配置文件生成中。这需要使用 macrobenchmark 库来使用
BaselineProfileRule
捕获基线配置文件,并使用CompilationMode.Partial(warmupIterations)
评估配置文件性能。(Ie0a7d,b/250083467,b/253094958)
版本 1.2.2
版本 1.2.2
2023 年 1 月 11 日
androidx.profileinstaller:profileinstaller:1.2.2
发布。版本 1.2.2 包含这些提交。
错误修复
- 启用对压缩或未压缩的基线配置文件的处理(Ic61a0)
版本 1.2.1
版本 1.2.1
2022 年 12 月 7 日
androidx.profileinstaller:profileinstaller:1.2.1
发布。版本 1.2.1 包含这些提交。
新功能
- 为 S_V2 (API 32) 和 TIRAMISU (API 33) 启用 profileinstaller(b/254900303)。
版本 1.2.0
版本 1.2.0
2022 年 7 月 27 日
androidx.profileinstaller:profileinstaller:1.2.0
发布。版本 1.2.0 包含这些提交。
自 1.1.0 以来重要的更改
- 添加了对 Android 12 及以后版本使用的 ART 配置文件格式的支持。
- 在
ProfileInstallReceiver
中添加了新的 API,以便在使用基线配置文件时使用Macrobenchmarks
获得更一致的结果。
版本 1.2.0-rc01
2022 年 6 月 15 日
androidx.profileinstaller:profileinstaller:1.2.0-rc01
发布。版本 1.2.0-rc01 包含这些提交。
- 此版本与
androidx.profileinstaller:profileinstaller:1.2.0-beta03
相同。
版本 1.2.0-beta03
2022 年 6 月 1 日
androidx.profileinstaller:profileinstaller:1.2.0-beta03
发布。版本 1.2.0-beta03 包含这些提交。
版本 1.2.0-beta02
2022 年 5 月 18 日
androidx.profileinstaller:profileinstaller:1.2.0-beta02
发布。版本 1.2.0-beta02 包含这些提交。
- 没有更改,需要支持 Compose 1.2.0-beta02 版本。
版本 1.2.0-beta01
2022 年 5 月 11 日
androidx.profileinstaller:profileinstaller:1.2.0-beta01
已发布。 版本 1.2.0-beta01 包含以下提交。
API 更改
- 在
ProfileInstallReceiver
中添加新的 API,以便在使用基线配置文件时与Macrobenchmarks
获得更一致的结果。(If2ae5, b/215740637)
错误修复
- 当尝试在 Android 12 及更高版本上使用元数据
V_001
格式时,Profile Installer 会抛出一个有帮助的消息。(aosp/1978526, b/217502387) - Profile Installer 现在使用
androidx.startup
版本1.1.1
。(aosp/2077099, b/229828376)
版本 1.2.0-alpha02
2022年1月26日
androidx.profileinstaller:profileinstaller:1.2.0-alpha02
已发布。 版本 1.2.0-alpha02 包含以下提交。
此版本与 1.2.0-alpha01
相同。
版本 1.2.0-alpha01
2022年1月12日
androidx.profileinstaller:profileinstaller:1.2.0-alpha01
已发布。 版本 1.2.0-alpha01 包含以下提交。
新功能
- 添加对 Android 12 及更高版本使用的 ART 配置文件格式的支持。
版本 1.1.0
版本 1.1.0
2022年2月9日
androidx.profileinstaller:profileinstaller:1.1.0
已发布。 版本 1.1.0 包含以下提交。
版本 1.1.0-rc01
2021年12月15日
androidx.profileinstaller:profileinstaller:1.1.0-rc01
已发布,自 1.1.0-beta04 以来没有更新。 版本 1.1.0-rc01 包含以下提交。
版本 1.1.0-beta04
2021年12月1日
androidx.profileinstaller:profileinstaller:1.1.0-beta04
已发布。 版本 1.1.0-beta04 包含以下提交。
版本 1.1.0-beta03
2021年11月17日
androidx.profileinstaller:profileinstaller:1.1.0-beta03
已发布。 版本 1.1.0-beta03 包含以下提交。
错误修复
- 更新以支持 Compose 1.1.0-beta03
版本 1.1.0-beta02
2021年11月3日
androidx.profileinstaller:profileinstaller:1.1.0-beta02
已发布。 版本 1.1.0-beta02 包含以下提交。
错误修复
- 更新以支持 Compose 1.1.0-beta02
版本 1.1.0-beta01
2021年10月27日
androidx.profileinstaller:profileinstaller:1.1.0-beta01
已发布。 版本 1.1.0-beta01 包含以下提交。
- 自 1.1.0-alpha07 以来没有更改。
版本 1.1.0-alpha07
2021年10月13日
androidx.profileinstaller:profileinstaller:1.1.0-alpha07
已发布。 版本 1.1.0-alpha07 包含以下提交。
新功能
- 添加了对 Android N 上 profm 的支持
版本 1.1.0-alpha06
2021年9月29日
androidx.profileinstaller:profileinstaller:1.1.0-alpha06
已发布。 版本 1.1.0-alpha06 包含以下提交。
错误修复
- 修复 N、O 和 O_MR1 上的 profileinstaller 转码问题。(I12d75)
版本 1.1.0-alpha05
2021年9月15日
androidx.profileinstaller:profileinstaller:1.1.0-alpha05
已发布。 版本 1.1.0-alpha05 包含以下提交。
错误修复
- 修复了 Android Nougat 和 Android Oreo 的多 dex apk 配置文件转码。
版本 1.1.0-alpha04
2021年9月1日
androidx.profileinstaller:profileinstaller:1.1.0-alpha04
已发布。 版本 1.1.0-alpha04 包含以下提交。
错误修复
- 修复
ProfileInstaller
以便使用基线配置文件的应用更容易使用CompilationMode.BaselineProfile
运行 MacroBenchmarks。(I42657, b/196074999)
版本 1.1.0-alpha03
2021年8月18日
androidx.profileinstaller:profileinstaller:1.1.0-alpha03
已发布。 版本 1.1.0-alpha03 包含以下提交。
错误修复
- 更改 profileinstaller 跳过行为,以便将 PackageInfo.lastUpdatedTime 记录到应用文件目录中的文件中,并在下次运行时安装配置文件之前进行比较。(Ib93d1)
- 调整 P、Q、R 设备上的配置文件格式以符合 ART 要求 (I84e89)
版本 1.1.0-alpha02
2021年8月4日
androidx.profileinstaller:profileinstaller:1.1.0-alpha02
已发布。 版本 1.1.0-alpha02 包含以下提交。
更新以与 Compose 1.1.0-alpha01 兼容。
版本 1.1.0-alpha01
2021年7月21日
androidx.profileinstaller:profileinstaller:1.1.0-alpha01
已发布。 版本 1.1.0-alpha01 包含以下提交。
错误修复
- 修复了在某些情况下会触发严格模式的错误。
版本 1.0
版本 1.0.4
2021年10月13日
androidx.profileinstaller:profileinstaller:1.0.4
已发布。 版本 1.0.4 包含以下提交。
- 更新以支持 Compose 1.0.4
版本 1.0.3
2021年9月29日
androidx.profileinstaller:profileinstaller:1.0.3
已发布。 版本 1.0.3 包含以下提交。
- 更新以支持 Compose 1.0.3
版本 1.0.2
2021年9月1日
androidx.profileinstaller:profileinstaller:1.0.2
已发布。 版本 1.0.2 包含以下提交。
错误修复
- 添加了 P、Q、R 设备的配置文件转码。此更改意味着这些设备将转码配置文件,确保写入的配置文件始终可被 ART 使用。以前在这些平台上会跳过转码,这有时会导致 ART 无法处理源配置文件。开发人员 API 没有更改。
版本 1.0.1
2021年8月4日
androidx.profileinstaller:profileinstaller:1.0.1
已发布。 版本 1.0.1 包含以下提交。
更新以与 Compose 1.0.1 兼容。
版本 1.0.0
2021年7月28日
androidx.profileinstaller:profileinstaller:1.0.0
已发布。 版本 1.0.0 包含以下提交。
1.0.0 的主要功能
配置文件安装程序是一个新的库,允许库和应用程序定义“配置文件规则”并将 ART 配置文件信息与 APK 捆绑在一起,并且此库将在应用程序启动后安装这些配置文件。这可以用来提高应用程序性能。
有关这些配置文件规则是什么以及它们如何工作的更多信息,请参阅 1.0.0-beta01 中的详细发行说明。
版本 1.0.0-rc02
2021年7月14日
androidx.profileinstaller:profileinstaller:1.0.0-rc02
已发布。 版本 1.0.0-rc02 包含以下提交。
版本 1.0.0-rc01
2021年7月1日
androidx.profileinstaller:profileinstaller:1.0.0-rc01
已发布。 版本 1.0.0-rc01 包含以下提交。
这是一个 RC 版本,与 beta 版本没有变化。
版本 1.0.0-beta01
2021年6月16日
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>
如果您的应用具有非平凡的启动要求并且想要使用 ProfileInstaller.writeProfile
API 手动触发配置文件安装,这将特别有用。
什么是配置文件规则?
库的配置文件规则在位于
src/main
或等效目录中的文本文件baseline-prof.txt
中指定。该文件每行指定一个规则,在这种情况下,规则是用于匹配库中方法或类的模式。这些规则的语法是使用adb shell profman --dump-classes-and-methods ...
时使用的可读 ART 配置文件格式的超集。这些规则采用以下两种形式之一来针对方法或类。方法规则将具有以下模式
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
类规则将具有以下模式
<CLASS_DESCRIPTOR>
这里
<FLAGS>
是一个或多个字符H
、S
和P
,以指示是否应将此方法标记为“热”、“启动”或“启动后”。<CLASS_DESCRIPTOR>
是目标方法所属类的描述符。例如,类androidx.compose.runtime.SlotTable
的描述符为Landroidx/compose/runtime/SlotTable;
。<METHOD_SIGNATURE>
是方法的签名,包括方法的名称、参数类型和返回类型。例如,LayoutNode
上的方法fun isPlaced(): Boolean
的签名为isPlaced()Z
。这些模式可以具有通配符(
**
、*
和?
),以便单个规则包含多个方法或类。
规则的作用是什么?
具有标志
H
的方法表示此方法是“热”方法,应提前编译。具有标志
S
的方法表示它是启动时调用的方法,应提前编译以避免启动时编译和解释方法的成本。带有
P
标记的方法表示该方法是在启动后调用的。此文件中存在的类表示它在启动期间使用,并且应该预先分配到堆中,以避免类加载的开销。
这是如何工作的?
库可以定义这些规则,这些规则将被打包到 AAR 工件中。当构建包含这些工件的 APK 时,这些规则会合并在一起,并且合并后的规则用于构建特定于 APK 的紧凑二进制 ART 配置文件。然后,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
配置文件需要平衡。
- 正确构建的配置文件,能够正确优先考虑启动路径和性能关键的方法和类,将产生最佳结果。但是,在配置文件中包含过多的方法或类最终会导致内存消耗和磁盘使用量的负面影响,因此建议在定义自己的配置文件规则时从保守开始。