【问题标题】:Keep inner interface method names in proguard将内部接口方法名称保留在 proguard 中
【发布时间】:2014-10-28 13:45:13
【问题描述】:

假设我有..

public class SomeClass {


    public interface someInterface {

        public void firstMethod(String variable);


        public void secondMethod(String variable);


        public void thirdMethod();

    }
}

我会的..

-keep,includedescriptorclasses public class com.somepackage.SomeClass {
    <fields>;
    <methods>;
}

-keep public interface com.somepackage.someInterface {*;}

我结束了

public interface someInterface {

        public void a(String variable);


        public void a(String variable);


        public void a();

    }

如何确保该接口的方法名称不被混淆,同时仍然混淆类的其余部分?

【问题讨论】:

  • 如果它在一个类的内部,proguard 参数不应该将你的外部类作为接口全名的一部分吗?

标签: java android proguard


【解决方案1】:

ProGuard 使用 Java 字节码的命名约定,如类文件名和堆栈跟踪中所示。因此:

-keep public interface com.somepackage.SomeClass$someInterface {*;}

【讨论】:

  • 我失去了一个小时,因为我使用了上面对我不起作用的语法。原因是我在没有公共访问器的情况下定义了我的接口(它已经过时,因为所有接口都是公共的)。在这种情况下,您需要使用:-keep interface com.somepackage.SomeClass$someInterface {*;}。我认为 ProGuard 应该足够“聪明”来自动处理他的案件。
【解决方案2】:

我尝试了以下方法,它似乎有效:

-keep interface com.somepackage.SomeClass$someInterface

【讨论】:

    【解决方案3】:

    对于那些正在寻找如何保留自定义注释(在 java 中的 @interface 中定义)保留其所有成员的人,

    您实际上应该使用如下方式来保留它:

    -keep @interface com.your.annotation.interface. {*;}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多