Şu anda çok fazla yansıma kullanan bir Android kütüphanesi kullanıyorum.Proguard: Kullanılmayan yöntemleri ortadan kaldırmaktan (ve engellemekten) kaçınmak için tüm bir paketin küçültülmesinden (ve gizlenmekten) nasıl kaçınılmalı?
Proguard'ı etkinleştirdiğimde ve çalıştırdığım anda ... çöker.
Neden? Çok fazla yansıma kullanır ve yöntemler yalnızca yansıma yoluyla çağrılır, böylece küçültme işlemi sırasında kullanılmayan ve çıkarılan proguard tarafından algılanır, böylece NoSuchMethodError
atılır.
Neden böyle oluyor? Yani proguard kod parçalarının (bütün yöntemleri)
Yani, nasıl küçülen veya şaşırtma önlemek için, ProGuard yapılandırabilirsiniz onlar kullanılmamış vardır gördüğünü ve bu nedenle kaldırır olarak küçülen işlemi sırasında kaldırıldıkları anlamaya kolaydır tüm bir paket? (kitaplık)
Not: -dontshrink seçeneğini kullanmak istemiyorum, hepsi ya da hiçbir şey yok ve sadece belirli bir paketden kaçınmak istiyorum.
diğer bilgiler:
çalışma zamanı hatası şudur: Sorun bir iç iç sınıf biri olduğunu
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.my.app.debug, PID: 3771
java.lang.NoSuchMethodError: observeValueForKeyPath [class java.lang.String, class java.lang.Object, class com.my.lib.util.Dictionary, class java.lang.Object]
at com.my.lib.util.Observable$ObservationManager$Observer.<init>(SourceFile:47)
at com.my.lib.util.Observable$ObservationManager$Observer.<init>(SourceFile:26)
at com.my.lib.util.Observable$ObservationManager.addObserver(SourceFile:159)
...
not alın ...
Bulunduğum Yapılandırma gibi bir şey var:
-keep,includedescriptorclasses class com.my.** { *; }
-keepclassmembers class com.my.lib** { *; }
-keep,includedescriptorclasses class com.my.lib.util.Observable$* { *; }
-keep,includedescriptorclasses class com.my.lib.util.Observable$*$* { *; }
Ama görünüşe göre bu sadece küçülme işlemi sırasında çıkarılan yöntemlerin gizlenmesini önler ... daralma sırasında yöntemleri kaldırmaktan kaçınmam gerekir.
[ProGuard kullanırken tutmak için nasıl/Belirli bir paket yolu dışlamak?] Olası yinelenen (http://stackoverflow.com/questions/4830474/how-to-keep-exclude-a-particular-package -path-kullanırken-proguard) – Elltz
Bu bir kopya değil.Özellikle, diğer cevapların çözmediği (ve diğer cevapların gerçekten cevapladığı) gizlemeyi devre dışı bırakmanın bir yolunu arıyorum. – neteinstein
Küresel neden bu kadar çok kötüye gidiyor? ** uygulamanızın küçültülmesine ** ihtiyacınız var mı? Şu anda size sebep olan daralmaya değer mi? –