2014-03-01 47 views
5

我使用NineOldAndroids' ObjectAnimators在Android的地圖標記V2淡出用下面的代碼:NineOldAndroids ObjectAnimators不使用ProGuard工作並簽署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(); 

這與APK的可調試版本的完美作品。

但是,當我簽署我的apk並使用ProGuard時,突然標記不會淡入。我的猜測是alpha屬性已被混淆,因此"alpha"ObjectAnimator.ofFloat與混淆的alpha屬性不匹配Marker。如何在使用ProGuard時使動畫起作用?

只是爲了保持完整性,這是我的ProGuard-rules.txt的唯一內容

-dontwarn com.squareup.okhttp.** 

回答

9

它使用反射,所以你需要你的方法名字不變即setAlpha(),這樣的事情在你的ProGuard配置:

# This is due to ObjectAnimator using reflection to access get/sets 
-keep class com.your.package.ClassThatUsesObjectAnimator { *; } 
+0

謝謝!我用'-keepclassmembers類com.google.android.gms.maps.model.Marker {*; }'。你能否更新答案,還是應該讓我的個人班使用ObjectAnimator? – well

+0

你也可以做,我個人會有一個類來控制動畫,但不會推動標記也沒問題 – Blundell

2

Nineolddroids庫是開源已經如此運行ProGuard的上是毫無意義的。

如果您可以在混淆自己的源文件或第三方開源庫之間進行選擇,那麼選擇自己的源文件將是明智之舉。

將這些行添加到您的proguard-project.txt,您的應用程序將正常工作。

## 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.** { *; }