迁移到 Jetpack 撰写错误:不允许未绑定符号
Posted
技术标签:
【中文标题】迁移到 Jetpack 撰写错误:不允许未绑定符号【英文标题】:Migrate to Jetpack compose error: Unbound symbols not allowed 【发布时间】:2020-12-26 12:04:13 【问题描述】:我想迁移我现有的项目以部分使用 Jetpack compose。 所以我使用 Android studio 4.2-canary9 打开它并添加了一个 compose 活动,以便 android Studio 添加所需的配置。
当我尝试运行该项目时,它给了我一个错误:
e: java.lang.AssertionError: Unbound symbols not allowed
使用Run with --stacktrace
我收到了这个堆栈跟踪:
e: java.lang.AssertionError: Unbound symbols not allowed
Unbound public symbol for public kotlinx.android.synthetic.main.activity_main/state.<get-state>|-5663767092261428579[0]
Unbound public symbol for public kotlinx.android.synthetic.main.activity_main/stateContainer.<get-stateContainer>|-4335442114828357571[0]
Unbound public symbol for public kotlinx.android.synthetic.main.activity_main/list.<get-list>|9139041782698166288[0]
at org.jetbrains.kotlin.psi2ir.Psi2IrTranslator.generateModuleFragment(Psi2IrTranslator.kt:96)
at org.jetbrains.kotlin.backend.jvm.JvmBackendFacade.doGenerateFiles(JvmBackendFacade.kt:87)
at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.generateModule(JvmIrCodegenFactory.kt:40)
at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:35)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.generate(KotlinToJVMBytecodeCompiler.kt:616)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:203)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:164)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:51)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:86)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:44)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:98)
at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:346)
at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:102)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:240)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.access$compileIncrementally(IncrementalCompilerRunner.kt:39)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner$compile$2.invoke(IncrementalCompilerRunner.kt:81)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:93)
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:601)
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:93)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1633)
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 java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)
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)
第一条路线提到了activity_main
,这是一个不使用 compose 进行的活动。指的是Kotlin android extensions,用来代替findViewById
(state
是一个TextView ID)
Unbound public symbol for public kotlinx.android.synthetic.main.activity_main/state.<get-state>|-5663767092261428579[0]
以下是一些配置:
撰写:1.0.0-alpha02 & 1.0.0-alpha04 kotlin:1.4.0 和 1.4.10 android-gradle-plugin:4.2.0-alpha09 & 4.2.0-alpha13 kotlin-stdlib:jdk8 和 jdk7提前致谢
【问题讨论】:
嗨,你解决了这个问题吗? 嘿。不,这个项目仍然存在这个问题。 @Jonathan 显然这是已修复的,并将随 Kotlin 1.4.20 (Link) 一起提供 知道什么时候发布吗? @DavidIbrahim 我做了...这导致了另一个问题。 youtrack.jetbrains.com/issue/KT-43350 【参考方案1】:我遇到了同样的问题。作为一种解决方法,我用 ViewBinding 替换了所有 Kotlin 合成。完成后一切正常。
【讨论】:
所以 kotlin 合成材料无法与 jetpack compose 一起工作?【参考方案2】:显然,此问题已修复,将发送至 Kotlin:1.4.20
(当时尚未发布)
Google issue tracker reference
Kotlin Pull request
[11 月 27 日更新]
更新到 1.4.20
导致另一个错误 [Ref]
【讨论】:
composeOptions kotlinCompilerVersion '1.4.20' kotlinCompilerExtensionVersion '1.0.0-alpha04' 将 Kotlin 编译器更新到 1.4.20 后,我收到此错误 'could not find org.jetbrains.kotlin:kotlin -compiler-embeddable:1.4.20' 很遗憾1.4.20
尚未发布。这是一个承诺,它将在该版本中得到修复。结帐kotlin releases了解详情。
这可行,但1.4.20
导致此youtrack.jetbrains.com/issue/KT-43350。所以...
@guness 是的...我自己尝试过1.4.20
。没用。你是对的
真实故事,更新到 1.4.20 导致 Mahdi-Malv 描述的上述错误【参考方案3】:
我在迁移模板项目时遇到了类似的问题。为我解决的问题是删除了一些模板代码,这些代码访问了 findbyviewid 抓取的元素。
【讨论】:
创建的默认视图中直接引用视图的任何代码。例如使用 findViewById 的任何代码。以上是关于迁移到 Jetpack 撰写错误:不允许未绑定符号的主要内容,如果未能解决你的问题,请参考以下文章
带有 Django 1.7 迁移的 Python 2.7 未绑定方法
prolog 中不允许从 Eclipse 迁移到 Android Studio 错误内容
将我的 bloc 应用程序迁移到空安全。错误:“AssignmentBloc”不符合类型参数“B”的绑定“BlocBase<AssignmentState>”