在proguard中保留内部接口方法名称

时间:2014-09-03 22:47:26

标签: java android proguard

让我说我有..

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();

    }

如何确保此接口的方法名称不会被混淆,同时仍然会混淆其他类?

3 个答案:

答案 0 :(得分:30)

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

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

答案 1 :(得分:1)

我尝试了以下内容,似乎有效:

-keep interface com.somepackage.SomeClass$someInterface

答案 2 :(得分:0)

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

您实际上应该像下面这样使用以保持它:

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