我有一个Android库模块,其中一个公共类使用来自外部库的一些注释。注释纯粹是在内部使用的,因此我不想将其公开为API
Gradle依赖项,将该依赖项泄漏给客户端,而是将其保留为implementation
。
但是,由于无法解析注释类,因此注释的存在会对使用我的库的应用程序发出警告。这实际上是可以理解的-公共类包含不在客户端的编译路径上的符号-但是在打包库时是否有办法将注释保留在内部-或被调用的应用程序忽略?注释是RUNTIME
个保留注释,因此它们不能在构建步骤或类似步骤中完全去除。
出于说明目的进行设置:
我的图书馆:
build.gradle
具有implementation com.example.foobar
,其中包含@Example
注释Foo.java
是带有@Example
注释的公共类:@Example(foo = "bar")
public class Foo {
...
}
my-library
中的其他类本身要求注释在运行时出现某些客户端:
build.gradle
的{{1}}包含类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
的{{1}}更改为implementation
,则消除了警告,但是应用程序现在将在其构建路径上获得API
批注,这是一个内部实施细节。还有另一种方法吗?