AndroidAnnotations – ViewById не может использоваться для частного элемента

Версия AndroidAnnotations: 4.3.1

Версия для Android от SDK: 26

Версия Котлина: 1.1.3-2

Я пытаюсь создать приложение с помощью Kotlin и AndroidAnnotaions. Сборка заканчивается

Error:Execution failed for task ':app:kaptDebugKotlin'. > Internal compiler error. See log for more details 

в androidannotations.log a есть тонна эрос, как

 00:10:43.908 [RMI TCP Connection(91)-127.0.0.1] ERROR oaipModelValidator:77 - org.androidannotations.annotations.ViewById cannot be used on a private element 

это использование аннотации @ViewById

 @ViewById var description: TextView? = null 

То же самое происходит и с аннотированными vars Pref.

Кто-нибудь другой сталкивается с той же проблемой, или это только я?

Попробуйте использовать lateinit :

 @ViewById lateinit var description: TextView 

Причина получения этой ошибки может быть вызвана поведением поля поддержки. Он невидим по умолчанию, и идентификатор field может использоваться только в аксессуарах свойства. Вот почему @ViewById cannot be used on a private element .

Причина того, почему работает lateinit заключается в том, что она меняет доступность поля. По словам Котлина, док :

Свойства поздней инициализации также отображаются как поля. Наглядность поля будет такой же, как и видимость сетчатого активатора lateinit.

Итак, @JvmField – еще одно решение этой проблемы.

 @ViewById @JvmField var helloTextView: TextView? = null 

Это также изменяет видимость поля как то, что говорится в документе:

Если вам нужно открыть свойство Kotlin в качестве поля в Java, вам необходимо аннотировать его с помощью аннотации @JvmField. Поле будет иметь такую ​​же видимость, что и базовое свойство. Вы можете аннотировать свойство с @JvmField, если оно имеет фоновое поле, не является приватным, не имеет открытых, переопределяющих или константных модификаторов и не является делегированным свойством.

Вы также можете обратиться к этому примеру и к документам Kotlin о фреймворках Android, используя обработку аннотаций.