我正在开发一个在 UI 端使用 Jetpack Compose 的 Android 项目,能够在 Android Studio 布局检查器中检查重组详细信息会很有用,但“显示重组计数”选项不起作用如果应用程序正在运行并被选中,则会出现。如果未设置“过滤器系统定义”,则会显示系统视图,检查该选项会显示空树。
如果 Compose Code-Labs 应用程序之一正在运行,则会出现选项 does,例如:
这证明问题不是模拟器或Android Studio版本问题。我正在运行 Android Studio Electric Eel,2022.1.1 补丁 1,并且所有应用程序都使用相同的模拟器 (API 33)
我检查了我们的项目,发现问题在于使用与 Code-Labs 示例相同的一组 Compose 库(有效),并且在这两种情况下我都在运行调试构建。
在 StackOverflow 上我也看到其他地方提到了这个问题,例如: Jetpack Compose:布局检查器没有显示重组计数菜单(但我们使用相同的 Compose、Android Studio 版本),所以我已经没有想法了。 对于可能导致此问题的原因,还有其他建议吗?
我已经设法找到问题所在。 对于接下来的内容,我在应用程序运行时发现了问题,并在启动 LayoutInspector 时查看“运行”选项卡以查看输出。 通过将我们的应用程序运行时的输出(不起作用)与突出显示日志行的 Compose Code-Lab 演示(起作用)进行比较:
ClassLoader.getResourceAsStream:返回的类加载器 对于托管的进程,Thread.getContextClassLoader() 可能会失败 多个应用程序。您应该显式指定上下文类 装载机。例如: Thread.setContextClassLoader(getClass().getClassLoader());
事实证明,原因是我们使用 Shot 来截取屏幕截图作为 Compose 测试的一部分,并且我们在应用程序清单和 androidTest 清单中有一个“android:sharedUserId”属性。 这似乎不再需要了,因此我已从两个清单中删除了该属性。
进行此更改后,LayoutInspector 现在可以看到 Jetpack Compose 节点,并且通过快速测试,最新的 Shot 库仍然可以在 Android 测试中截取屏幕截图。
如果您遇到相同的类加载器错误,并且上述修复不适用于您,这里还有另一篇文章介绍如何解决该问题:Android:“托管多个应用程序的进程的类加载器可能会失败”