ProGuard'ın bir sınıfı bir arabirimi uygulamadan değiştirmesini durdurmak için açık bir yol var mı?ProGuard'ın Serializable arabiriminin bir sınıftan çıkarılması nasıl durdurulur
java.io.Serializable
'u uygulayan bir dersim var, diyelim ki com.my.package.name.Foo
. Ben ProGuard ile koştuktan sonra, artık Serializable
uygular. instanceof Serializable
ile bir örneği kontrol edersem Serializable
'dan Foo
ve false
'a gönderdikten sonra null
'u alırım.
-keep class com.my.package.name.Foo
Ben de denedim: Ben bu sınıfı görmezden ProGuard ayarlamak için emin yaptık
-keep class com.my.package.name.Foo { *; }
ve ben de bunu yaparak bütün paketi denedim:
-keep class com.my.package.name.** { *; }
ya:
-keep class com.my.package.** { *; }
-keep class * implements java.io.Serializable { *; }
ama boşuna: ve ayrıca sadece tüm Serializable
sınıfları tutmak. Kardeş paketinde de (com.my.package.name2.Bar
) Serializable
'u uygulayan başka bir sınıf var ve benzer şekilde kullanılıyor ancak sorun yok.
Bunun alakalı olduğundan emin değilim, ancak Android ile kullanım için bir kavanozda ambalajlıyorum. Bu sınıfları kullanan kod Bundle
s onları koyarak dahil olmak üzere bu yüzden Serializable
gerek. Belki de bir şekilde ProGuard'ın Foo
'un hiçbir zaman Serializable
olarak kullanılmadığını düşündüğüm ama bunun Bundle.putSerializable(String, Serializable)
parametresine bir parametre olarak aktardığım ve ayrıca dolaylı bir döküm yapmamın mümkün olmadığını düşündüğümü düşündüm: Serializable serializable = foo;
. Aslında, ben hata ayıklama, ben Foo
Bundle
içine koymak ve Bundle
inceleyebilir ve orada Foo
örneğini görebilirsiniz, ancak aldığınızda, döküm başarısız olur.
Teşekkürler ama Foo' artık 'Serializable' uygulamıyor' javap' 'ile kontrol edilip ettik. 'ClassCastException' hakkındaki yorumunuz bana da mantıklı geliyor, ancak bu şekilde çalışmıyor. Şüphelerim şudur ki, küçülme ve optimizasyonda, normal Java kodunun o anda Java değil, bayt kodu olduğu gibi yapmasını beklediğinizden davranışları değiştirmek için bir şey olmuştur. – kabuko
Eğer ProGuard '-dontshrink' olarak ayarlandıysa ve sonra açık bir şekilde '-keep, allowoptimization, allowhrinking, allowobfuscation Foo'yu kullandıktan sonra' Foo'nun 'seri hale getirilebilir 'özelliğini kullanacağını buldum ama maalesef bu benim için bir çözüm değil. Genelde olmak için küçültmek istiyorum. – kabuko
Sorunu gösteren küçük bir örneğiniz varsa, ona bakacağım. Posta adresimi ProGuard web sitesinin Geri Bildirim sayfasında bulabilirsiniz. –