Аннотации (например, @Something
) в основном являются метками для кода.Вы помечаете одну часть кода так, чтобы какой-то другой код мог найти эти маркировки.
Этот " другой код " равен обычно аннотациейПроцессор.Он находит аннотации и что-то делает с кодом, помеченным этими аннотациями.Например, он может генерировать новый код (например, Dagger, Butterknife и т. Д.).
В зависимости от того, как вы вводите зависимости в своем проекте (в зависимости от используемого keyword
- implementation
,api
, compileOnly
, runtimeOnly
, annotationProcessor
, kapt
и т. Д.), Зависимость будет использоваться вашим проектом по-другому.
Если вы используете annotationProcessor
, ваша зависимость будет не будет упаковано в ваше приложение, но будет использоваться во время компиляции вашего приложения.
Вы не хотите упаковывать компилятор (код, который обрабатывает @AnAnnotation
) в ваше приложение, поскольку он просто используется для правильной подготовки кода вашего приложения (и никогда не используется в вашем приложении во время выполнения).
Подумайте об этом так:
Если вы едете на поезде и вам нужно распечатать билет на поезд, вы не хотите носить с собой принтерпоезд.После того, как принтер завершит печать билета, вы берете билет и садитесь в поезд.Принтер уже сделал свою работу.Вы можете оставить его.
Если вы пометите некоторый код с помощью @AnAnnotation
, вы просто захотите, чтобы библиотека, которая обрабатывает эту аннотацию, выполняла свою работу и исчезала.Отсюда особый тип зависимости - annotationProcessor
.
Теперь о kapt
.Это простоЕсли вы хотите использовать процессоры аннотаций в проектах с кодом Kotlin, просто используйте kapt
вместо annotationProcessor
.Думайте об этом как о annotationProcessor
с поддержкой Kotlin.
Некоторые библиотеки по-разному используют @Annotations
.Они не вызывают генерации какого-либо кода во время компиляции, но они используют аннотации во время выполнения.
Это обычно основанные на отражении библиотеки, которые "просматривают" код в среде выполнения.Точно так же, как Retrofit просматривает ваше interface
при запуске приложения.
Вот почему вы обычно включаете в приложение библиотеку с @Annotations
, и эти аннотации упаковываются в ваш apk для работы во время выполнения.
Суммируя:
annotationProcessor
и kapt
ключевые слова, помогут вам указать, как зависимости будут использоваться в вашем проекте.
Если вы хотите представить библиотеку, которая использует аннотации и генерирует некоторый код, используйте kapt
, чтобы не «раздувать» ваш apk кодом, который уже выполнил свою работу и никогда больше не будет использоваться.