迁移到 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,用来代替findViewByIdstate是一个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 未绑定方法

如何允许kendo网格绑定到未定义的字段

Jetpack 撰写单行输入文本

Jetpack 撰写新源无法正常工作

prolog 中不允许从 Eclipse 迁移到 Android Studio 错误内容

将我的 bloc 应用程序迁移到空安全。错误:“AssignmentBloc”不符合类型参数“B”的绑定“BlocBase<AssignmentState>”