Jetpack Compose预览无法渲染,请求排查解决方法
问题:Jetpack Compose预览无法渲染,报PoolingContainer类未找到异常
从昨天起所有Jetpack Compose预览均无法渲染,点击预览旁的信息图标,得到如下堆栈跟踪:
Failed to instantiate one or more classes The following classes could not be instantiated: -androidx.compose.ui.tooling.ComposeViewAdapter(Open Class, Show Exception, Clear Cache) if this is an unexpected error you can also try to build the project, then manually refresh the layout java.lang.NoClassDefFoundError: Could not initialize class androidx.customview.poolingcontainer.PoolingContainer at androidx.compose.ui.platform.ViewCompositionStrategy$DisposeOnDetachedFromWindowIfNotInPoolingContainer.installFor(ViewCompositionStrategy.android.kt:97) at androidx.compose.ui.platform.AbstractComposeView.<init>(ComposeView.android.kt:123) at androidx.compose.ui.platform.ComposeView.<init>(ComposeView.android.kt:392) at androidx.compose.ui.platform.ComposeView.<init>(ComposeView.android.kt:388) at androidx.compose.ui.tooling.ComposeViewAdapter.<init>(ComposeViewAdapter.kt:131) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:339) at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:176) at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:136) at com.android.tools.idea.rendering.LayoutlibCallbackImpl.loadView(LayoutlibCallbackImpl.java:301) at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:417) at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:428) at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:332) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965) at android.view.LayoutInflater.inflate(LayoutInflater.java:663) at android.view.LayoutInflater.inflate(LayoutInflater.java:505) at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:363) at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:436) at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:121) at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:739) at com.android.tools.idea.rendering.RenderTask.lambda$inflate$8(RenderTask.java:895) at com.android.tools.idea.rendering.RenderExecutor$runAsyncActionWithTimeout$2.run(RenderExecutor.kt:187) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829)
当前环境:
- Android Studio Giraffe(2022.3.1)
- Jetpack Compose BOM版本
2023.06.01 - 近一周未修改构建文件、未更新Android Studio或SDK工具
- 已尝试清理重建项目、清除AS缓存,无效
询问:该类为何会从类路径中消失,该如何解决?
解决方案
1. 显式添加PoolingContainer依赖
在app模块的build.gradle或build.gradle.kts中添加依赖,确保类被引入类路径:
dependencies { // 对应Compose BOM 2023.06.01的兼容版本为1.0.0 implementation "androidx.customview:customview-poolingcontainer:1.0.0" }
添加后同步项目并重新构建。
2. 强制统一依赖版本解决冲突
若存在依赖版本冲突,在项目根目录的build.gradle或app模块中强制指定版本:
configurations.all { resolutionStrategy { force "androidx.customview:customview-poolingcontainer:1.0.0" force "androidx.customview:customview:1.2.0" // 关联基础库版本,与Compose BOM匹配 } }
3. 彻底清理Gradle缓存
执行以下命令清除Gradle的构建缓存和项目构建文件:
./gradlew cleanBuildCache ./gradlew clean
完成后重新同步项目并构建。
4. 检查并修复本地SDK依赖
- 打开Android Studio的SDK Manager,进入
Android SDK > SDK Tools - 确认
Android SDK Build-Tools、Android SDK Platform-Tools为对应版本,若异常可尝试重新安装 - 检查本地SDK目录下
extras/android/m2repository/androidx/customview路径,若依赖文件损坏,手动删除该目录后重新同步项目
5. 重置Gradle在线依赖拉取
- 打开
File > Settings > Build, Execution, Deployment > Gradle - 勾选Offline work,点击
Sync Now - 同步完成后取消勾选Offline work,再次点击
Sync Now,强制拉取最新依赖缓存
内容的提问来源于stack exchange,提问作者aga
相关产品推荐
相关产品推荐

