如何在Android中使用Proguard来混淆界面方法及其参数?

Han*_*Han 14 obfuscation android android-proguard

我有以下代码:

public class MyClass {
    public void method1(Integer marks) {

    }

    private String method3(String name){

    }
    public interface interface1 {
        void method4(Integer ID);
        void method5(Integer rate, boolean status);
    }
}
Run Code Online (Sandbox Code Playgroud)

我用过progaurd-rules.pro

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

-keepparameternames

-keep public class *
-keepclassmembers public class *{
   public *;
 }
-keep public interface packageName.MyClass$interface1 { *; }
Run Code Online (Sandbox Code Playgroud)

混淆代码如下:

public class MyClass {
    public void method1(Integer marks) {

    }

    private String a(String var1){

    }
    public interface interface1 {
        void method4(Integer var1);
        void method5(Integer var1, boolean var2);
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望接口方法变量(ID,速率和状态)不要混淆.即如下

public interface interface1 {
    void method4(Integer ID);
    void method5(Integer rate, boolean status);
} 
Run Code Online (Sandbox Code Playgroud)

怎么可能?

Ary*_*yan -1

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

-keep public interface com.somepackage.SomeClass$someInterface {*;}
Run Code Online (Sandbox Code Playgroud)

如果您的接口不是公开的。

-keep interface com.somepackage.SomeClass$someInterface {*;}.
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,接口函数的参数名称没有保留 (3认同)