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

问题描述 投票:12回答:2

我有以下代码:

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

我用过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 { *; }

混淆代码如下:

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

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

public interface interface1 {
    void method4(Integer ID);
    void method5(Integer rate, boolean status);
} 

怎么可能?

android obfuscation android-proguard
2个回答
2
投票

您可以通过向-keepattributes添加额外的标志来保留方法的参数。它们看起来像这样:

-keepattributes LocalVariableTable,LocalVariableTypeTable

不幸的是,这不仅可以在您想要的界面中进行混淆,而且可以在整个项目中进行混淆。也许那对你没问题。

如果您使用随Android SDK一起提供的默认proguard配置,那么您还可以使用特殊注释来防止某些类进行模糊处理。 Check it out


-1
投票

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

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

如果您的界面不公开。

-keep interface com.somepackage.SomeClass$someInterface {*;}.
© www.soinside.com 2019 - 2024. All rights reserved.