如果参数有我的自定义注释,那么构造函数应该保留。
答案 0 :(得分:0)
好吧,我自己使用注释处理器解决了。
创建一个应用于类的注释,该注释应保留构造函数:
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.BINARY)
annotation class KeepInit
用于项目构建的注释处理器:
fun enclosingType(el: Element): Element {
var e: Element? = el
var c: TypeElement?
do {
e = e?.enclosingElement
c = e as? TypeElement
} while (e != null && c == null)
return c ?: el
}
val enclosing = enclosingType(elementOfCustomAnnotation)
if (enclosing.annotationMirrors.none { it.annotationType.toString() == "xxx.foo.bar.KeepInit" }) {
throw Exception("must add @KeepInit to class: $enclosing")
}
保护规则:
-keepclassmembers,allowobfuscation @xxx.foo.bar.KeepInit class * {
<init>(...);
}
示例:
@KeepInit
class SomeClass(
@SomeCustomAnnotation("id") private val id: String,
@SomeCustomAnnotation("title") private val title: String
)