Sorry for answering my own question, but I just happened to bump into the solution when playing around. Actually it is much simpler than I thought:
# Annotated interfaces (including methods which are also kept in implementing classes)
-keep @com.foo.bar.annotation.Keep interface * {
*;
}
Obviously it was wrong to specify <methods>
on an interface keep clause, maybe because ProGuard only filters for actual method implementations, not mere method declarations as can be found in interface declarations.
The above syntax seems to keep the full interface (class name, method names) plus all implementing method names, which is logical if I think about it, because if I do implement an interface I cannot change (obfuscate) the method names anyway.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…