Jetpack Compose异常:java.lang.NoSuchMethodError: No static method XXXTheme
compose
compose - Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,通过Compose文件格式简化应用部署过程。
项目地址:https://gitcode.com/gh_mirrors/compose/compose
免费下载资源
·
记录下使用Jetpack Compose遇到的异常:
2022-06-05 20:57:14.763 22194-22194/com.nxg.androidsample E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.nxg.androidsample, PID: 22194
java.lang.NoSuchMethodError: No static method AndroidJetpackComposeSampleTheme(ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V in class Lcom/nxg/commonui/theme/ThemeKt; or its super classes (declaration of 'com.nxg.commonui.theme.ThemeKt' appears in /data/app/com.nxg.androidsample-FLUePk_M8gpkEnuU7J72Eg==/base.apk!classes3.dex)
at com.nxg.androidsample.main.MainFragment$onCreateView$1$1.invoke(MainFragment.kt:49)
at com.nxg.androidsample.main.MainFragment$onCreateView$1$1.invoke(MainFragment.kt:48)
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:410)
at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:252)
at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:251)
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:228)
at androidx.compose.ui.platform.CompositionLocalsKt.ProvideCommonCompositionLocals(CompositionLocals.kt:166)
at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(AndroidCompositionLocals.android.kt:123)
at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(AndroidCompositionLocals.android.kt:122)
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:228)
at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt.ProvideAndroidCompositionLocals(AndroidCompositionLocals.android.kt:114)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1$3.invoke(Wrapper.android.kt:157)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1$3.invoke(Wrapper.android.kt:156)
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:228)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(Wrapper.android.kt:156)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(Wrapper.android.kt:140)
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:3337)
at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2582)
at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2571)
at androidx.compose.runtime.SnapshotStateKt__DerivedStateKt.observeDerivedStateRecalculations(DerivedState.kt:247)
at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(Unknown Source:1)
at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:2571)
at androidx.compose.runtime.ComposerImpl.composeContent$runtime_release(Composer.kt:2522)
at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:478)
at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:748)
at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:433)
2022-06-05 20:57:14.764 22194-22194/com.nxg.androidsample E/AndroidRuntime: at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:140)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:131)
at androidx.compose.ui.platform.AndroidComposeView.setOnViewTreeOwnersAvailable(AndroidComposeView.android.kt:907)
at androidx.compose.ui.platform.WrappedComposition.setContent(Wrapper.android.kt:131)
at androidx.compose.ui.platform.WrappedComposition.onStateChanged(Wrapper.android.kt:182)
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:138)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:131)
at androidx.compose.ui.platform.AndroidComposeView.onAttachedToWindow(AndroidComposeView.android.kt:994)
at android.view.View.dispatchAttachedToWindow(View.java:20107)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3619)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3626)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3626)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3626)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3626)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3626)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3626)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3626)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3626)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3626)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3626)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2549)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2166)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8887)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1280)
at android.view.Choreographer.doCallbacks(Choreographer.java:1019)
at android.view.Choreographer.doFrame(Choreographer.java:911)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1248)
at android.os.Handler.handleCallback(Handler.java:900)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8668)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)
原因是使用了Jetpack Compose的自定义Theme,但是没启用Jetpack Compose的功能。
解决办法:配置对应的JavaVersion版本(至少JavaVersion.VERSION_1_8及以上),配置buildFeature compose为true和composeOptions编译版本。
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
buildFeatures {
dataBinding = true
viewBinding = true
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = Compose.version
}
完整的module的build.gradle如下:
plugins {
id("com.android.library")
id("kotlin-android")
id("kotlin-kapt")
}
android {
compileSdk = BuildConfig.compileSdk
defaultConfig {
minSdk = BuildConfig.minSdkVersion
targetSdk = BuildConfig.targetSdkVersion
testInstrumentationRunner = BuildConfig.testInstrumentationRunner
consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
getByName("release") {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
buildFeatures {
dataBinding = true
viewBinding = true
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = Compose.version
}
}
dependencies {
testImplementation(TestLib.junit)
androidTestImplementation(TestLib.androidJunit)
androidTestImplementation(TestLib.espresso)
implementation(AndroidX.appcompat)
implementation(AndroidX.constraintlayout)
implementation(AndroidX.cardview)
implementation(AndroidX.recyclerView)
implementation(AndroidX.coreKtx)
implementation(AndroidX.activityKtx)
implementation(AndroidX.fragmentKtx)
implementation(AndroidX.legacySupportV4)
implementation(AndroidX.swiperefreshlayout)
implementation(Lifecycle.liveDataKtx)
implementation(Lifecycle.viewModelKtx)
implementation(NavigationLib.fragmentKtx)
implementation(NavigationLib.uiKtx)
implementation(Google.material)
implementation(Compose.ui)
implementation(Compose.material)
implementation(Compose.activity)
implementation(Compose.preview)
implementation(Compose.lifecycleViewModel)
implementation(Compose.uiTooling)
}
以上Gradle 构建配置使用了 Kotlin 脚本 (KTS),可查看官方文档《将构建配置从 Groovy 迁移到 KTS》学习。
啰嗦一句如果遇到Jetpack Compose相关的问题,可以尝试先对照官方文档:
《将 Jetpack Compose 添加到应用中》看看自己的module集成Jetpack Compose是否正确,再看看升级版本是否有帮助,祝好运!
GitHub 加速计划 / compose / compose
33.28 K
5.15 K
下载
compose - Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,通过Compose文件格式简化应用部署过程。
最近提交(Master分支:3 个月前 )
5e3a0953
full diff: https://github.com/docker/cli/compare/v27.4.0-rc.1...8d1bacae3e49ed1d096eede8eef4ae851d7f2eae
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
7 天前
a2a3eb72
- full diff: https://github.com/docker/cli/compare/cb3048fbebb1...v27.4.0-rc.1
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
7 天前
更多推荐
已为社区贡献3条内容
所有评论(0)