Jetpack Compose 无法查看重组计数

问题描述 投票:0回答:2

我正在开发一个在 UI 端使用 Jetpack Compose 的 Android 项目,能够在 Android Studio 布局检查器中检查重组详细信息会很有用,但“显示重组计数”选项不起作用如果应用程序正在运行并被选中,则会出现。如果未设置“过滤器系统定义”,则会显示系统视图,检查该选项会显示空树。

enter image description here

如果 Compose Code-Labs 应用程序之一正在运行,则会出现选项 does,例如: enter image description here

这证明问题不是模拟器或Android Studio版本问题。我正在运行 Android Studio Electric Eel,2022.1.1 补丁 1,并且所有应用程序都使用相同的模拟器 (API 33)

我检查了我们的项目,发现问题在于使用与 Code-Labs 示例相同的一组 Compose 库(有效),并且在这两种情况下我都在运行调试构建。

在 StackOverflow 上我也看到其他地方提到了这个问题,例如: Jetpack Compose:布局检查器没有显示重组计数菜单(但我们使用相同的 Compose、Android Studio 版本),所以我已经没有想法了。 对于可能导致此问题的原因,还有其他建议吗?

android
2个回答
0
投票

我已经设法找到问题所在。 对于接下来的内容,我在应用程序运行时发现了问题,并在启动 LayoutInspector 时查看“运行”选项卡以查看输出。 通过将我们的应用程序运行时的输出(不起作用)与突出显示日志行的 Compose Code-Lab 演示(起作用)进行比较:

ClassLoader.getResourceAsStream:返回的类加载器 对于托管的进程,Thread.getContextClassLoader() 可能会失败 多个应用程序。您应该显式指定上下文类 装载机。例如: Thread.setContextClassLoader(getClass().getClassLoader());

事实证明,原因是我们使用 Shot 来截取屏幕截图作为 Compose 测试的一部分,并且我们在应用程序清单和 androidTest 清单中有一个“android:sharedUserId”属性。 这似乎不再需要了,因此我已从两个清单中删除了该属性。

进行此更改后,LayoutInspector 现在可以看到 Jetpack Compose 节点,并且通过快速测试,最新的 Shot 库仍然可以在 Android 测试中截取屏幕截图。

如果您遇到相同的类加载器错误,并且上述修复不适用于您,这里还有另一篇文章介绍如何解决该问题:Android:“托管多个应用程序的进程的类加载器可能会失败”


0
投票

根据this问题跟踪器,Layout Inspector中有

两个
视图选项。确保选择组件树之外的那个。

Show Recomposition Counts

© www.soinside.com 2019 - 2024. All rights reserved.