gpt4 book ai didi

android - 如何在 Android 项目中使用 Kotlin 工作表

转载 作者:行者123 更新时间:2023-12-04 11:40:56 26 4
gpt4 key购买 nike

我想用Kotlin worksheets在我的 Android 项目中添加如下代码草稿:

草稿.ws.kts

package com.example.app

val a = 1 + 1
a

工作表本身正在工作:
val a: Int
2

但是构建我的 Android 应用程序失败并显示以下输出:
> Task :appicals:compileDebugKotlin FAILED
e: org.jetbrains.kotlin.util.KotlinFrontEndException: Front-end Internal error: Failed to analyze declaration Draft_ws
File being compiled: (1,43) in /Users/me/secretproject/app/src/main/java/com/example/app/draft.ws.kts
The root cause org.jetbrains.kotlin.resolve.lazy.NoDescriptorForDeclarationException was thrown at: org.jetbrains.kotlin.resolve.lazy.BasicAbsentDescriptorHandler.diagnoseDescriptorNotFound(AbsentDescriptorHandler.kt:18)
at org.jetbrains.kotlin.resolve.ExceptionWrappingKtVisitorVoid.visitDeclaration(ExceptionWrappingKtVisitorVoid.kt:43)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDeclaration(KtVisitorVoid.java:453)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDeclaration(KtVisitorVoid.java:21)
at org.jetbrains.kotlin.psi.KtVisitor.visitScript(KtVisitor.java:78)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitScript(KtVisitorVoid.java:73)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitScript(KtVisitorVoid.java:519)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitScript(KtVisitorVoid.java:21)
at org.jetbrains.kotlin.psi.KtScript.accept(KtScript.java:69)
at org.jetbrains.kotlin.psi.KtElementImplStub.accept(KtElementImplStub.java:59)
at org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer$analyzeDeclarations$1.registerDeclarations(LazyTopDownAnalyzer.kt:78)
at org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer$analyzeDeclarations$1.visitKtFile(LazyTopDownAnalyzer.kt:96)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtFile(KtVisitorVoid.java:513)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtFile(KtVisitorVoid.java:21)
at org.jetbrains.kotlin.psi.KtFile.accept(KtFile.kt:242)
at org.jetbrains.kotlin.psi.KtFile.accept(KtFile.kt:229)
at org.jetbrains.kotlin.resolve.ExceptionWrappingKtVisitorVoid.visitElement(ExceptionWrappingKtVisitorVoid.kt:27)
at org.jetbrains.kotlin.com.intellij.psi.PsiElementVisitor.visitFile(PsiElementVisitor.java:34)
at org.jetbrains.kotlin.psi.KtVisitor.visitKtFile(KtVisitor.java:73)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtFile(KtVisitorVoid.java:69)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtFile(KtVisitorVoid.java:513)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtFile(KtVisitorVoid.java:21)
at org.jetbrains.kotlin.psi.KtFile.accept(KtFile.kt:242)
at org.jetbrains.kotlin.psi.KtFile.accept(KtFile.kt:229)
at org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer.analyzeDeclarations(LazyTopDownAnalyzer.kt:201)
at org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer.analyzeDeclarations$default(LazyTopDownAnalyzer.kt:60)
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:112)
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:82)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:554)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:81)
at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:107)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:545)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:176)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:163)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:51)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:85)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:43)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:104)
at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:349)
at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:105)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:237)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.access$compileIncrementally(IncrementalCompilerRunner.kt:37)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner$compile$2.invoke(IncrementalCompilerRunner.kt:79)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:91)
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:606)
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:99)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1645)
at sun.reflect.GeneratedMethodAccessor182.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.jetbrains.kotlin.resolve.lazy.NoDescriptorForDeclarationException: Descriptor wasn't found for declaration SCRIPT
at org.jetbrains.kotlin.resolve.lazy.BasicAbsentDescriptorHandler.diagnoseDescriptorNotFound(AbsentDescriptorHandler.kt:18)
at org.jetbrains.kotlin.resolve.lazy.BasicAbsentDescriptorHandler.diagnoseDescriptorNotFound(AbsentDescriptorHandler.kt:17)
at org.jetbrains.kotlin.resolve.lazy.LazyDeclarationResolver.findClassDescriptor(LazyDeclarationResolver.kt:88)
at org.jetbrains.kotlin.resolve.lazy.LazyDeclarationResolver.getScriptDescriptor(LazyDeclarationResolver.kt:65)
at org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer$analyzeDeclarations$1.visitScript(LazyTopDownAnalyzer.kt:89)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitScript(KtVisitorVoid.java:519)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitScript(KtVisitorVoid.java:21)
at org.jetbrains.kotlin.psi.KtScript.accept(KtScript.java:69)
at org.jetbrains.kotlin.psi.KtElementImplStub.accept(KtElementImplStub.java:59)
at org.jetbrains.kotlin.resolve.ExceptionWrappingKtVisitorVoid.visitDeclaration(ExceptionWrappingKtVisitorVoid.kt:32)
... 61 more

依赖项是 implementation "org.jetbrains.kotlin:kotlin-script-runtime:1.3.70"

最佳答案

编辑 (2021-04-11):这是一个无权存在的丑陋混杂。请阅读 my shinier, newer, better回答。
不确定这是否算是一个很好的答案,因为它不仅可以完全修复它,而且其要点是……更改文件扩展名。只需在末尾添加下划线或其他内容。
OMFSM我花了所以长期试图找到一种正确的方法来做到这一点。然后尝试一百万种不同的kludge。我以前什至没有遇到过这个问题(甚至不知道工作表存在 TBH),这看起来是个好主意。
有几种方法可以使这变得更容易,但是无论何时您想要构建它仍然需要人工干预(或者您可以将它们关闭直到再次需要它们)。
就我个人而言,我刚刚创建了几个批处理文件(尽管它们每个只是一个命令),它们重命名所有 .kts 文件(然后将它们重命名)并创建了一些方便的快捷方式。我正在运行 Windows,而 bash 脚本编写绝对不在我的技能范围内,所以我确信这也可以在 *nix 上完成。
将它们全部重命名,以免它们尝试被编译:

forfiles /S /M *.ws.kts /C "cmd /c ren @file @fname.kts_"
并将它们转换回有效的工作表:
forfiles /S /M *.ws.kts_ /C "cmd /c ren @file @fname.kts"
要使用其中之一制作批处理文件:
  • 打开记事本
  • 将其中一行复制到其中。
  • 转至 File > Save , 导航到保存项目的文件夹并为其指定文件名 被双引号 (") 括起来,以 .bat 结尾
  • 例如 “disable_worksheets.bat” “enable_worksheets.bat”但是 确保包含双引号 .


  • 现在,您只需在 Windows 资源管理器中找到该文件,然后双击它即可一次性禁用或启用它们。
    如果你愿意,你也可以在 Android Studio 中制作一个宏来做这件事,但是一次只能改变一个文件的 AFAIK(虽然你可以设置一个键盘快捷键,所以如果你没有太多工作表)。要使宏禁用工作表:
  • 在左侧的树 View 中选择您的工作表文件
  • 在菜单栏中,转到 Edit > Macros然后单击“ 开始宏录制
  • 在树 View 中右键单击您的工作表,然后在 Refactor 下菜单点击“重命名文件...
  • 在您的键盘上
  • 输入下划线 _
  • 输入
  • 在菜单栏中,转到 Edit > Macros然后单击“ 停止宏录制
  • 为您的宏命名并单击 好的

  • 对于重新启用它的人:
  • 在左侧的树 View 中选择您的工作表文件
  • 在菜单栏中,转到 Edit > Macros然后单击“ 开始宏录制
  • 在树 View 中右键单击您的工作表,然后在 Refactor 下菜单点击“重命名...
  • 在您的键盘上
  • 退格
  • 输入
  • 在菜单栏中,转到 Edit > Macros然后单击“ 停止宏录制
  • 为您的宏命名并单击 好的

  • 现在您只需在树 View 中选择一个文件,然后在菜单中转到 Edit > Macros然后单击您需要的那个。但为了更方便,您可以设置键盘快捷键。要做到这一点:
  • 在菜单栏中,转到 File然后单击“ 设置...
  • 在左侧菜单中,单击“ 键盘映射
  • 在编辑器的主 Pane 中,单击 在“”旁边扩展该部分
  • 右键单击要为其设置快捷方式的宏,然后单击“ 添加键盘快捷方式
  • 按下要使用的快捷方式的键(例如 Ctrl + 逗号 )。如果快捷方式已经使用这些键,它会警告您,因此您可能必须使用几个修饰符(例如 Ctrl + Shift + G )
  • 我发现一些默认情况下是空的(至少在我的安装中)并且仅使用 Ctrl 作为修饰符是 Ctrl + 逗号 (,), Ctrl + 分号 (;) 和 Ctrl + 反斜杠 (\)。
  • 大多数小键盘键都没有使用,但显然它们不那么方便。

  • 点击好的 返回主设置窗口。
  • 如果要为其他宏设置快捷方式,只需重做步骤 4-6
  • 点击好的 在设置窗口的底部。

  • 完成这些设置后,您只需单击左侧树 View 中的文件名,然后按键盘快捷键即可。
    希望所有对某人有帮助!对不起,如果这有点长,简洁也不是我的技能。

    关于android - 如何在 Android 项目中使用 Kotlin 工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60636800/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com