作者:odile微笑头 | 来源:互联网 | 2023-09-24 18:04
我创建了包含这个主体的简单Base64Images辅助类:companionobject{valABSTRACT_COLORS[imageencodedinbase64]}AB
我创建了包含这个主体的简单Base64Images辅助类:
companion object{
val ABSTRACT_COLORS = "[image encoded in base64]"
}
ABSTRACT_COLORS实际上是一个包含570438个字符的字符串.
在编译期间,我得到了:
org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error: Failed to generate property ABSTRACT_COLORS
...
...
The root cause was thrown at: ByteVector.java:213 at org.jetbrains.kotlin.codegen.MemberCodegen.genFunctionOrProperty(MemberCodegen.java:205)
Caused by: java.lang.IllegalArgumentException
我以为我可以在一个字符串中存储2147483647 (231 – 1)个字符.
这是为什么?
我在下面发布了这张图片.
您可以使用this tool生成base64.
提示:编辑此类或编译项目会冻结Android Studio.
我将使用一些轻量级编辑器进行编辑,并使用终端进行编译.
解决方法:
正如@ mfulton26在评论中提到的那样,加载字符串时编译器会发生一些事情.应报告给Kotlin issue tracker的崩溃错误.
作为解决方法,您可以将其作为文件添加到src / main / resources目录中,并以String或ByteArray的形式动态加载字符串.
例如,如果文件是src / main / resources / abstract-colors.txt,则可以使用read the entire file into a string:
val ABSTRACT_COLORS = javaClass.getResourceAsStream("/abstract-colors.txt")
.bufferedReader().use { it.readText() }
如果您不需要它进行base64编码,则可以将图像存储为二进制文件并将其读入ByteArray.
val ABSTRACT_COLORS = javaClass.getResourceAsStream("/abstract-colors.jpg")
.use { it.readBytes() }