Я создал простой вспомогательный класс 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 (2 31 – 1) символов в строке.
Почему это?
Я разместил этот снимок ниже.
Вы можете использовать этот инструмент для генерации base64.
Подсказка: редактирование этого класса или компиляция проекта замораживает Android Studio.
Я бы использовал небольшой редактор для редактирования и терминал, чтобы скомпилировать его.
Как упоминалось в комментарии от @ mfulton26, что-то происходит с компилятором при загрузке строки. Ошибка сбоя, о которой следует сообщать трекеру Kotlin .
В качестве рабочего процесса вы можете добавить это как файл в каталог src/main/resources
и загружать строку динамически либо как String
либо как ByteArray
.
Например, если файл был src/main/resources/abstract-colors.txt
вы можете прочитать весь файл в строке :
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() }