Когда мне нужно использовать Kapt в зависимостях Gradle? - PullRequest
1 голос
/ 20 июня 2019

Я устанавливал зависимости в Gradle, и я не понимаю, почему иногда мне нужно использовать kapt для библиотек, таких как жизненный цикл и база данных комнат, чтобы использовать @Something аннотации.Но в некоторых библиотеках, таких как Retrofit2 и Gson, мне не нужно использовать kapt, и я могу использовать аннотации, такие как @SerializedName?

Ответы [ 2 ]

1 голос
/ 22 июня 2019

Аннотации (например, @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 кодом, который уже выполнил свою работу и никогда больше не будет использоваться.

0 голосов
/ 22 июня 2019

Обычно библиотеки взаимодействуют с аннотациями одним из следующих двух способов:

  • Использование отражения. Код библиотеки может запрашивать аннотации во время выполнения для выполнения определенной логики. Эти библиотеки обычно упаковываются как один артефакт и не требуют использования kapt или annotationProcessor. Пример: модификация, которая обращается к аннотациям с использованием отражения и не включает процессор аннотаций.
  • Использование процессора аннотаций. Процессоры аннотаций - это плагины компилятора, которые вызываются перед основным этапом компиляции, могут получать доступ к аннотациям и коду вокруг них и выполнять задачи на основе этого ввода. Процессоры аннотаций обычно приходят в виде отдельных артефактов, поскольку они содержат код, который не нужен во время выполнения, поэтому его не следует упаковывать в ваш APK. Пример: Butterknife, который обрабатывает аннотации во время компиляции и поставляется с отдельным модулем butterknife-compiler, который содержит процессор аннотаций. Вы должны использовать butterknife-compiler как kapt или annotationProcessor зависимость, а не implementation, api или compile, так как вам не нужен процессор аннотаций во время выполнения.

Чтобы ответить на ваш вопрос, нет общего способа узнать, поставляется ли библиотека, использующая аннотации, с процессором аннотаций. Вы должны проверить документацию для конкретной библиотеки и следовать инструкциям по установке.

...