2016-07-25 4 views
5

나는 그 클래스의 인스턴스를 반환하는 parse()이라는 몇 가지 정적 메서드가 포함 된 클래스 집합 (50 개 이상)을 보유하고 있습니다.다른 반환 시간을 사용하여 정적 메서드를 유지하도록 Proguard를 구성하는 방법

class SomeType { 

    // Parse methods 
    public static SomeType parse(String text) { ... } 
    public static SomeType parse(Object obj) { ... } 
    ... 

    // Other methods 
    public void static somethingStatic(...) { ... } 
    public void somethingNotStatic(...) { ... } 
    ... 
} 

나는이 클래스와 모든 메소드와 필드 제외 parse(...) 방법을 당황하게하는 ProGuard에서를 구성하기 위해 노력하고있어이 그 클래스 중 하나의 예입니다. 기본적으로 클래스 이름, 모든 정적 및 비 정적 메서드, 클래스 필드를 난독 화하려고합니다. 그래서 내가 어떻게 할 수 ...

-keepclassmembers class SomeType { 
    public static SomeType parse(***); 
} 

을하고는 SomeType을 위해 잘 작동,하지만 난 내 50 개 클래스 각각에 대해이 규칙을 작성해야하고 싶지 않은 :

내가 사용하려고했습니다 그것을 일반화할까요?

-keepclassmembers class ** { 
    public static * parse(***); 
} 

하지만 ProGuard에서이

답변

8

규칙 그냥하는 일치합니다, 반환 형식으로 ***을 사용, 거의 정확했다 ... 반환 형식의 구문에 대해 불평 :

나는 시도 어떤 유형 :

-keepclassmembers class ** { 
    public static *** parse(***); 
} 

또한 -keepclassmembers-keepclasseswithmembers보다 선호됩니다. 클래스 자체가 아니라 지정한 메서드 만 유지하므로 설명하는대로 필요하지 않을 수 있습니다. 당신은 구문 분석 방법에 대한 하나 개 이상의 인수가있는 경우

, 당신은 사용해야합니다

-keepclassmembers class ** { 
    public static *** parse(...); 
} 

...어떤 형의 인수의 수와 일치합니다.

2
-keepclasseswithmembers class * { 
    public static *** parse(***); 
}