Android Studio Аннотация AbstractProcessor не найден

Я пытаюсь добавить обработчик аннотации к моему проекту Android, но я получаю сообщение об ошибке, что AbstractProcessor не может быть найден. Тем временем я создал отдельный проект java, но я предпочел бы сохранить все в одном проекте Android. Какой лучший способ включить AbstractProcessor в мой проект? Я использую AndroidStudio и Gradle.

ОБНОВИТЬ:

Я переупаковал javax.annotation , javax.lang.model и javax.tools чтобы сидеть в пространстве имен моего проекта ( согласно этим инструкциям ). Я включаю ресурсы / META-INF / services / javax.annotation.processing.Processor, который содержит полное имя класса моего подкласса AbstractProcessor , и все компилируется отлично. Однако процессор никогда не запускается.

EDIT: Короче говоря, у меня есть проект библиотеки Android, который предоставляет аннотацию для метода. Я хочу предоставить процессор, который вызывает ошибку времени компиляции, если аннотация используется неправильно. Если я попытаюсь поместить процессор в проект библиотеки Android, Gradle не будет его строить, потому что классы javax. * Не найдены. Единственный способ заставить его работать – создать java-модуль в библиотечном проекте и поставить там процессор. Однако это означает, что у меня должно быть 2 зависимости в любых проектах, которые я хочу использовать для этой аннотации; Один для получения аннотации, и один для получения процессора.

Solutions Collecting From Web of "Android Studio Аннотация AbstractProcessor не найден"

Хорошо, я думаю, здесь есть некоторые огромные недоразумения. Сначала вам не нужно ничего javax.* из javax.* ваше приложение. Обработчик аннотации запускается во время компиляции и завершает всю свою работу на этом этапе. После этого он может сгенерировать некоторые файлы или настроить проект и т. Д., И эти файлы будут упакованы в приложение. Обработчик аннотации (и его зависимость от javax.* ) Не будет, так как приложению не требуется процессор во время выполнения. Только разработчик нуждается в этом при создании проекта.

Мусорное здание также устарело. Вы должны использовать плагины Android gradle (официальный) или maven (неофициальный).

Вы могли бы спросить, что процессор будет нуждаться в зависимости во время компиляции. Это верно, но javax.* Предоставляются компилятором, который строит проект. В случае создания командной строки и IDE JDK APT на основе IntelliJ, в случае Eclipse плагин Eclipse JDT APT предоставляет классы.

Если вы хотите добавить свой аннотационный процессор в проект Android gradle, ознакомьтесь с нашим примером в AndroidAnnotations. Следует отметить использование плагина android-apt , который правильно добавляет зависимость времени компиляции (процессор), а также устанавливает пути источника, поэтому IntellJ может выбрать их без ручной конфигурации.

Размышления о редактировании:

К сожалению, вы должны переместить процессор в отдельный проект. Это единственный способ, которым это может работать, и, кстати, это естественный способ для обработчиков аннотаций. Например, dagger и AndroidAnnotations также имеют эту настройку (но по несколько иной причине). Да, это означает, что вам нужно добавить две зависимости, но вам нужно иметь дело с этим. Или вы можете добавить свою библиотеку в качестве необходимого отпечатка на свой процессор. В этом случае пользователь должен только добавить процессор в качестве зависимости, так как lib также будет добавлен как переходный отступ. Но это было бы странно странно, так как lib является основным делением здесь, процессор – это всего лишь инструмент для проверки правильности его использования (если я понял вашу хорошо зарекомендовавшую себя).