2014-03-01 5 views
5

I NineOldAndroids' ObjectAnimators bin mit dem folgenden Code in Android Map v2 Marker verblassen:NineOldAndroids ObjectAnimators nicht mit ProGuard arbeiten und unterzeichnet apk

mMarkerSelected = mMap.addMarker(new MarkerOptions() 
     .position(location.getLatLng()) 
     .title(location.getName()) 
     .snippet(location.getId()) 
     .icon(BitmapDescriptorFactory.defaultMarker(location.getMarkerHue()))); 
mMarkerSelected.setAlpha(0.0f); 
ObjectAnimator.ofFloat(mMarkerSelected, "alpha", 0.0f, 1.f) 
       .setDuration(300).start(); 

Das funktioniert perfekt mit debug Versionen des apk.

Allerdings, wenn ich meine apk unterzeichnen und ProGuard verwenden, plötzlich Marker nicht verblasst in. Meine Vermutung ist, dass das Alpha-Attribut verschleiert wurde, so dass "alpha" in ObjectAnimator.ofFloat vorbei nicht mit dem verschleierten alpha Attribute Übereinstimmen von die Marker. Wie kann ich die Animation bei der Verwendung von ProGuard nutzen?

Nur der Vollständigkeit halber, dies ist der einzige Inhalt meines proguard-rules.txt

-dontwarn com.squareup.okhttp.** 

Antwort

9

Es verwendet Reflektion, so dass Sie Ihre Methodennamen müssen intakt dh setAlpha(), so etwas wie dies in Ihrem proguard config:

+0

Vielen Dank! Ich ging mit '-keepclassmembers class com.google.android.gms.maps.model.Marker {*; } '. Können Sie die Antwort aktualisieren, oder sollte ich stattdessen meine persönliche Klasse behalten, die ObjectAnimator verwendet? – well

+0

Sie können entweder tun, persönlich würde ich eine Klasse haben, um die Animation zu steuern, aber nicht die Markierer ist auch in Ordnung – Blundell

2

Nineolddroids Bibliothek ist Open Source bereits so läuft Proguard auf es ist sinnlos.

Wenn Sie die Wahl haben, ob Sie Ihre eigene Quelldatei oder eine Open Source Bibliothek einer Drittpartei verschleiern möchten, sollten Sie Ihre eigene Quelldatei auswählen.

Fügen Sie diese Zeilen zu Ihrem proguard-project.txt hinzu und Ihre Anwendung wird gut funktionieren.

## Nineolddroid related classes to ignore 

-keep class com.nineoldandroids.animation.** { *; } 
-keep interface com.nineoldandroids.animation.** { *; } 
-keep class com.nineoldandroids.view.** { *; } 
-keep interface com.nineoldandroids.view.** { *; } 
Verwandte Themen