Удаление внутренней аннотации - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть библиотечный модуль Android, в котором класс publi c использует некоторые аннотации из внешней библиотеки. Аннотации используются исключительно для внутренних целей, поэтому я не хочу выставлять их как зависимость API Gradle, утечку этой зависимости клиентам, но оставлю ее как implementation.

Однако наличие аннотации вызывает предупреждения для приложений, использующих мою библиотеку, поскольку класс аннотации не может быть разрешен. Это на самом деле вполне понятно - класс publi c содержит символ, который не находится на пути компиляции клиента - но есть ли способ сохранить аннотации внутренними при упаковке библиотеки - или как-то игнорировать вызывающее приложение? Аннотации RUNTIME сохраняются, поэтому их нельзя полностью удалить на этапе сборки или аналогичным образом.

Настройка в иллюстративных целях:

my-library:

  • build.gradle имеет implementation com.example.foobar, который содержит @Example аннотацию
  • Foo.java - публикуемый c класс, аннотированный @Example:
@Example(foo = "bar")
public class Foo {
   ...
}
  • Другие классы в my-library требуют, чтобы аннотация присутствовала во время выполнения

some-client:

  • build.gradle имеет implementation com.example.mylibrary, который содержит класс Foo
  • Это приложение использует Foo объекты, но ему не нужно знать о аннотации, однако при построении она получит:
classes.jar(com/example/Foo.class): warning: Cannot find annotation method 'foo()' in type 'Example': class file for com.example.Example not found

Если изменить implementation на API для com.example.foobar, предупреждение будет удалено, но теперь приложение получит аннотацию @Example на своем пути сборки, которая является внутренней детали реализации. Есть ли другой способ?

...