首页 文章

ProGuard:保持用@Keep注释的接口实现

提问于
浏览
7

我想使用自定义 @Keep 注释在我的应用程序中注释一些接口并配置ProGuard以便

  • 不会混淆带注释的接口及其方法,

  • 不会在实现类时混淆那些接口方法的实现 .

我试过类似的东西

# Kept interfaces and all their methods
-keep interface @com.foo.bar.annotation.Keep * {
    <methods>;
}

# Classes implementing kept interfaces
-keep class * implements @com.foo.bar.annotation.Keep *

但显然语法无效 . 我尝试了其他的东西,但是ProGuard文档及其示例并没有真正清楚确切的语法以及在什么情况下可能出现的情况 .

2 回答

  • 0

    很抱歉回答我自己的问题,但我碰巧碰到了解决方案 . 实际上它比我想象的要简单得多:

    # Annotated interfaces (including methods which are also kept in implementing classes)
    -keep @com.foo.bar.annotation.Keep interface * {
        *;
    }
    

    显然,在接口keep子句上指定<methods>是错误的,可能是因为ProGuard仅过滤实际的方法实现,而不仅仅是接口声明中的方法声明 .

    上面的语法似乎保留了完整的接口(类名,方法名)以及所有实现方法名,如果我考虑它,这是合乎逻辑的,因为如果我实现了接口,我无论如何都不能改变(混淆)方法名 .

  • 5

    这有助于我的类似情况:

    Proguard stops Javascript in WebView from working

    我想这个原理会是一样的......

相关问题