2017-12-22 3 views
0

Am은 {----}의 중요성을 완전히 이해하지 못하고 있습니다. 누군가 아래의 예를 들고 차이점을 설명해 주시겠습니까?proguard - keep과 keep {}의 차이점은 무엇입니까?

문 1

-keep public class * extends android.view.View ; 

문 2

-keep public class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 

명세서 3

-keepclassmembers public class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 

답변

3

이 라인 01 23,

-keep public class * extends android.view.View ; 

이 때, 모호한되는 하나의 클래스를 방지한다 (이 경우)

-keep public class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 

방지 구체적인 방법을 난독 화되지. 대괄호가 포함되어 있으면 여러 항목에 적용됩니다. 또한 여러 클래스를 유지하는 데 사용할 수도 있고, 여러 다른 클래스를 유지할 수도 있습니다. packages 또는 패키지의 특정 클래스를 통해 사용할 수도 있습니다. 와일드 카드로 인해 전체 시스템이 유연합니다.

- keep something { 
    somethingElse 
} 

매개 변수를 기반으로 계속 지정합니다 : 기본적으로 : 동안

-keep something; 

수단은 하나 하나를 유지한다. 그것이 여러 가지를 지킬 수 있다는 것을 의미합니다. 하나의 (주석 버전 :

- keep something {//When something 
    somethingElse//keep somethingElse 
    //... and more as needed 
} 

그것은이 경우 문에 비해 어느 정도입니다.

if(something) 
    //single line for action 

과 : 기본적으로

if(something){ 
    //Do multiple things 
} 

:

-keep //keep if 
    public class * extends Something //the class extends something 

-keep //if 
    public class * extends Something //the class extends something 
    { 
     field1//keep field1 
     //and whatever else is supplied 
    } 

당신은 두 개의 서로 다른 사람이그리고 세 번째 예 :

-keep public keepclassmembers * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 

잘못되었습니다. keepclassmembers-keep 대신 을 사용합니다. -keep 클래스 멤버와 클래스 자신을 유지하면서 즉 :

-keepclassmembers public class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 

그리고 -keepclassmembers는, 클래스 회원을 유지합니다.

+0

이 경우 {keep}은 keepclassmembers {}와 어떻게 다른지는 회원 모두를 막기 때문에 유지됩니다. 위 문장 3을 업데이트했습니다. – Girish

+0

@ Girish는 진술 3으로 편집했습니다. – Zoe

+0

진술 3은 오타였습니다. 정정 해 주셔서 감사합니다. 내 이해는 입니다. 문 1 - 클래스보기가 난독 화되는 것을 방지합니다. 문 2 - 특정 방법, 즉 public을 방지합니다. (android.content.Context); 어느 쪽이든간에 {0} 사이에있는 은 난독 화되지 않습니다. 문 3 - 특정 메서드 즉 public을 방지합니다. (android.content.Context); 어느 쪽이오고있는간에 {}와 (와) 사이에 난독 화되는 것이 있습니다. 유지와 keepclassmembers의 차이를 이해하고 있습니다 만,이 특정의 경우는, 문장 2의 결과가 이며, 문장 3은 같을 것입니다. – Girish

관련 문제