我面临一些未知问题,看起来是一些内部编译错误: 这些是构建apk时的错误:
Error:org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error: Couldn't transform method node: doResume (Ljava/lang/Object;Ljava/lang/Throwable;)Ljava/lang/Object;:
Error:org.jetbrains.org.objectweb.asm.tree.analysis.AnalyzerException: Error at instruction #375 L0: Incompatible stack heights
Error:org.jetbrains.org.objectweb.asm.tree.analysis.AnalyzerException: Incompatible stack heights
任何帮助将不胜感激。
答案 0 :(得分:3)
经过长时间的努力,我找到了解决方案,问题的代码是:
if (investorType=="Institutional")
{linSignUp
if (firmName.isEmpty()) {
首先,如果是偶然放置在这里的线性布局的linSignUp
id的块,则不存在问题。
因此,当我删除它时,仅在此处的视图没有用,构建生成成功,但我仍然感到惊讶它应该在编译时给我错误。
注意:我在项目中使用anko库,如果我使用root.linSignUp
,这也可以解决问题。
答案 1 :(得分:1)
这是要查找的最令人沮丧的错误之一。
这是我遇到的错误:
java.lang.IllegalStateException: Backend Internal error: Exception during code generation
Cause: Back-end (JVM) Internal error: wrong code generated
org.jetbrains.kotlin.codegen.CompilationException Back-end (JVM) Internal error: Couldn't transform method node:
.....
如果您的堆栈跟踪进一步与视图和字符串有关,对我来说,罪魁祸首是xml视图ID太长。
此名称导致错误:team_management_players_recycler_view_layout 我将其简化为:team_man_players_recycler_layout
繁荣错误消失了!
希望这可以帮助其他人!
答案 2 :(得分:1)
我在 kotlin 1.3.72 中遇到了相同的错误,导致该错误的代码是暂停函数中包含的递归暂停函数:
suspend fun function1(){
suspend fun internalFun(){
// does something
internalFun() //<-- this was causing the problem
}
internalFun()
}
我通过重新安排代码的方式来解决问题,使自己无需在内部调用internalFun()
。
我不知道它们是suspend
函数的事实是否有用。
答案 3 :(得分:0)
如果将来对其他人有帮助,我的问题是由于使用了我的自定义扩展名:
suspend operator fun <T> MutableLiveData<T>.plusAssign(newValue: T) = ...
它的用法如下:
init {
job = GlobalScope.launch {
while (true) {
delay(1000)
foo += bar // This is the error.
}
}
}
使用它是完全可以的:
suspend fun refreshNextJob() {
foo += bar
}
不确定为什么会发生这种情况,但是也许以后会有所帮助。
答案 4 :(得分:0)
就我而言,我遇到了这个异常:
java.lang.IllegalStateException:后端内部错误:异常 代码生成期间原因:后端(JVM)内部错误:错误 代码生成的org.jetbrains.kotlin.codegen.CompilationException 后端(JVM)内部错误:无法转换方法节点:getS ()Ljava / lang / String ;: @ Lorg / jetbrains / annotations / NotNull;()// 隐形L0 线号9 L0 新的com / example / GsonConverter DUP INVOKESPECIAL com / example / GsonConverter。 ()V ASTORE 1 L1 LINENUMBER 10 L1 ...
原因:UTF8字符串太大元素未知根本原因是 抛出:ByteVector.java:246原因:后端(JVM)内部错误: 无法转换方法节点:getS()Ljava / lang / String ;:
@ Lorg / jetbrains / annotations / NotNull;()//不可见的L0 ...原因:UTF8字符串太大元素未知根本原因是 抛出:ByteVector.java:246正在位置(8,5)编译文件 在 C:/用户/用户/ AndroidStudioProjects / MyApplication03 / app / src / main / java / com / example / myapplication / ATest.kt 引发根本原因是:TransformationMethodVisitor.kt:92 File 正在以下位置编译: 文件:// C:/Users/user/AndroidStudioProjects/MyApplication03/app/src/main/java/com/example/myapplication/ATest.kt 根本原因被抛出:FunctionCodegen.java:1043 ...
原因:UTF8字符串太大元素未知,根本原因是 抛出:ByteVector.java:246 ...
我从应用程序中删除了类ATest
,但没有帮助。问题出在大约80 Kb(JSON)的恒定字符串中。
答案 5 :(得分:0)
就我而言,我只是忘记键入视图名称时添加方法调用。
img_my_best_image
代替
img_my_best_image.show()
答案 6 :(得分:0)
错误消息:“ e:org.jetbrains.kotlin.codegen.CompilationException:后端(JVM)内部错误:生成的字节码错误”
在我的情况下,我在MainViewModel.kt的一种方法中使用了runBlocking {}。
直到我更改了该方法中的参数名称为止,该应用程序已成功通过runBlocking {}进行编译(无论如何我都不应使用)。
我将runBlocking {}替换为viewModelScope.launch {},以获取此错误消息。