2011-04-08 33 views
14

ile bir sınıftaki tüm yöntemleri nasıl saklıyorum Android Uygulamamı optimize etmek için ProGuard kullanıyorum. Ancak Android enstrümantasyon testi için tüm üyeleri orada tutmak için bazı (ama hepsi değil) sınıflara ihtiyacım var. Çeşitli yaklaşımlar, son varlık çalıştı:ProGuard

-keepclassmembers public class com.mycompany.myclass { 
    *; 
} 

Ama şaşırtıcı hala burada acı bölüm var iki kurucular ve bir epeyce parametreye sahip olmasıdır

java.lang.NoSuchMethodError: com.mycompany.myclass.<init> 

olsun.

kimse ProGuard tamamen değişmeden ve el değmemiş bir sınıf tutmak için doğru sözdizimi biliyor mu?

+1

joker karakterini kullanın. – Matthias

cevap

17

Eh, itiraf zamanıdır. Soru bollocks. -keepclassmembers doğru. Sorun, takım arkadaşının kodu kırması ve kurucunun gerçekten orada olmaması nedeniyle ortaya çıktı.

Tüm sınıfın en iyi duruma getirilmiş bir değişiklik olması durumunda, kharles'in önerdiği gibi -keep kullanmanız gerektiğini, ancak tüm yöntemlerin yerinde kalmasını sağlamak için {*;} ürününü kullanmanız gerektiğini unutmayın. {*;} yalnızca test içindir

Not. Üretim için daha ince taneli bir yaklaşım kullanılmalıdır.

Sorunu aynı sorun yaşayan kimseye saklarım.

0

(kullanım tutmak ve hiçbir {*;})

-keep public class com.mycompany.myclass 

deneyin

+0

Hayır, bu onu daha da kötüleştiriyor. Utanç verici gerçek: Yukarıdaki ifadelerim doğru - Bir takım arkadaşı kodu kırdı ve bu yüzden işe yaramadı. Yani soruyu silmek veya aynı sorun olan başkaları için de tutmak mı? – Martin