2016-07-25 16 views
5

parse() adı verilen ve bu sınıfın bir örneğini döndüren birkaç statik yöntem içeren bir sınıflar kümem var (50'den fazla).Proguard statik yöntemleri farklı döndürme süreleriyle saklayacak biçimde nasıl yapılandırılır

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(...) { ... } 
    ... 
} 

Bunları sınıfları ve tüm yöntemleri ve alanları hariç parse(...) yöntemleri karartmak için ProGuard yapılandırmak çalışıyorum: Bu o sınıflardan birinin bir örnektir. Temel olarak, sınıf adını, tüm statik ve statik olmayan yöntemleri ve sınıf alanlarını gizlemek istiyorum. böylece Nasıl verebilirim ...

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

ve bu SomeType için iyi çalıştı, ama benim 50 sınıfların her biri için bu kuralı yazmak zorunda kalmak istemiyoruz:

Ben kullanmayı denedik genellemek mi?

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

ama ProGuard

cevap

8

Kuralınız sadece hangi maç olacak, dönüş türü olarak *** kullanmak neredeyse doğruydu ... dönüş türü sözdizimi hakkında yakınır:

Denedim herhangi türü:

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

Ayrıca, -keepclasseswithmembers üzerinden de -keepclassmembers tercih edilir, çünkü sınıfın kendisini değil (sizin belirttiğiniz durumda muhtemelen gerekli değildir) belirlediğiniz yöntemleri saklar. Eğer ayrıştırma yöntemleri için birden fazla argüman varsa

, kullanmak gerekir:

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

...herhangi tipi değişkenlerden herhangi biri sayıda eşleşir.

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