You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

切换Git分支后Jetpack Compose预览无法加载资源的问题排查

Jetpack Compose Preview Throws Resources$NotFoundException After Branch Switch

我最近在项目里遇到了一个Jetpack Compose预览的棘手问题,跟大家说说具体情况:

问题背景

项目原本已经集成了Jetpack Compose,功能一切正常。但当我切换到一个没有集成Compose的旧分支开发,之后切回Compose分支时,Compose预览突然完全无法工作了。我尝试了这些常规操作都没解决:

  • 重启Android Studio
  • 执行File > Invalidate Caches... > Invalidate and Restart
  • 重新构建整个项目(包括Clean Project和Rebuild Project)
    奇怪的是,代码在模拟器上运行完全正常,只有预览面板报错。

我的环境配置

  • Android Studio版本:Arctic Fox 稳定版
  • Compose版本:1.0.0
  • 相关依赖配置:
implementation "androidx.hilt:hilt-navigation-compose:1.0.0-alpha03"
implementation "androidx.compose.ui:ui:$compose_version"
implementation "androidx.compose.material:material:$compose_version"
implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
implementation "androidx.compose.runtime:runtime-livedata:$compose_version"
debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
implementation 'androidx.activity:activity-compose:1.3.0'
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07"

复现代码与报错信息

比如这个简单的预览Composable就会触发渲染错误:

@Preview
@Composable
fun PreviewMyScreen(){
    Image(painter = painterResource(id = R.drawable.ic_android_24dp), contentDescription = null)
}

对应的报错栈追踪:

android.content.res.Resources$NotFoundException: Could not resolve resource value: 0x7F08006C.
 at android.content.res.Resources_Delegate.throwException(Resources_Delegate.java:1153)
 at android.content.res.Resources_Delegate.throwException(Resources_Delegate.java:1129)
 at android.content.res.Resources_Delegate.throwException(Resources_Delegate.java:1133)
 at android.content.res.Resources_Delegate.getResourceValue(Resources_Delegate.java:921)
 at android.content.res.Resources_Delegate.getValue(Resources_Delegate.java:892)
 at android.content.res.Resources.getValue(Resources.java:1428)
 at androidx.compose.ui.res.PainterResources_androidKt.painterResource(PainterResources.android.kt:60)
 at com.roysolberg.android.datacounter.fragment.AppUsageDetailsNewActivityKt.PreviewMyScreen(AppUsageDetailsNewActivity.kt:70)
 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.base/java.lang.reflect.Method.invoke(Method.java:566)
 at androidx.compose.ui.tooling.CommonPreviewUtils.invokeComposableMethod(CommonPreviewUtils.kt:149)
 at androidx.compose.ui.tooling.CommonPreviewUtils.invokeComposableViaReflection$ui_tooling_release(CommonPreviewUtils.kt:188)
 at androidx.compose.ui.tooling.ComposeViewAdapter$init$3$1$composable$1.invoke(ComposeViewAdapter.kt:553)
 at androidx.compose.ui.tooling.ComposeViewAdapter$init$3$1$composable$1.invoke(ComposeViewAdapter.kt:551)
 at androidx.compose.ui.tooling.ComposeViewAdapter$init$3$1.invoke(ComposeViewAdapter.kt:590)
 at androidx.compose.ui.tooling.ComposeViewAdapter$init$3$1.invoke(ComposeViewAdapter.kt:546)
 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
 at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)
 at androidx.compose.ui.tooling.InspectableKt.Inspectable(Inspectable.kt:64)
 at androidx.compose.ui.tooling.ComposeViewAdapter$WrapPreview$1.invoke(ComposeViewAdapter.kt:495)
 at androidx.compose.ui.tooling.ComposeViewAdapter$WrapPreview$1.invoke(ComposeViewAdapter.kt:494)
 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
 at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)
 at androidx.compose.ui.tooling.ComposeViewAdapter.WrapPreview(ComposeViewAdapter.kt:490)
 at androidx.compose.ui.tooling.ComposeViewAdapter.access$WrapPreview(ComposeViewAdapter.kt:120)
 at androidx.compose.ui.tooling.ComposeViewAdapter$init$3.invoke(ComposeViewAdapter.kt:546)
 at androidx.compose.ui.tooling.ComposeViewAdapter$init$3.invoke(ComposeViewAdapter.kt:543)
 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
 at androidx.compose.ui.platform.ComposeView.Content(ComposeView.android.kt:384)
 at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:228)
 at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:227)
 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
 at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)
 at androidx.compose.ui.platform.CompositionLocalsKt.ProvideCommonCompositionLocals(CompositionLocals.kt:148)
 at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(AndroidCompositionLocals.android.kt:114)
 at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(AndroidCompositionLocals.android.kt:113)
 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
 at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)
 at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt.ProvideAndroidCompositionLocals(AndroidCompositionLocals.android.kt:106)
 at androidx.compose.ui.platform.WrappedComposition$setContent$1$1$3.invoke(Wrapper.android.kt:162)
 at androidx.compose.ui.platform.WrappedComposition$setContent$1$1$3.invoke(Wrapper.android.kt:161)
 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
 at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)
 at androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(Wrapper.android.kt:161)
 at androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(Wrapper.android.kt:144)
 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
 at androidx.compose.runtime.ComposerKt.invokeComposable(Composer.kt:3330)
 at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2577)
 at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2573)
 at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(SnapshotState.kt:540)
 at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:2566)
 at androidx.compose.runtime.ComposerImpl.composeContent$runtime_release(Composer.kt:2517)
 at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:476)
 at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:727)
 at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:432)
 at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:144)
 at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:135)
 at androidx.compose.ui.platform.AndroidComposeView.setOnViewTreeOwnersAvailable(AndroidComposeView.android.kt:727)
 at androidx.compose.ui.platform.WrappedComposition.setContent(Wrapper.android.kt:135)
 at androidx.compose.ui.platform.WrappedComposition.onStateChanged(Wrapper.android.kt:187)
 at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354)
 at androidx.lifecycle.LifecycleRegistry.addObserver(LifecycleRegistry.java:196)
 at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:142)
 at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:135)
 at androidx.compose.ui.platform.AndroidComposeView.onAttachedToWindow(AndroidComposeView.android.kt:814)
 at android.view.View.dispatchAttachedToWindow(View.java:20479)
 at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3489)
 at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3496)
 at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3496)
 at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3496)
 at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3496)
 at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3496)
 at android.view.AttachInfo_Accessor.setAttachInfo(AttachInfo_Accessor.java:44)
 at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:360)
 at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:431)
 at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:141)
 at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:714)
 at com.android.tools.idea.rendering.RenderTask.lambda$inflate$7(RenderTask.java:870)
 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:834)

临时解决方法(更新)

在我反复切换预览面板的设备模型(比如从Pixel 4切换到Pixel 5,再切回去)几次之后,预览突然恢复正常了。我推测这应该是Android Studio或者Compose预览工具的缓存相关Bug,导致资源引用在分支切换后没有正确更新。

内容的提问来源于stack exchange,提问作者Georgy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 04:13:13