NineOldAndroids ObjectAnimators不能与ProGuard和签名apk一起使用

时间:2014-03-01 21:22:02

标签: android proguard nineoldandroids

我正在使用NineOldAndroids的ObjectAnimators来淡化Android Map v2标记,其代码如下:

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不匹配使用Marker的模糊alpha属性。如何在使用ProGuard时使动画生效?

为了完整起见,这是我的proguard-rules.txt

的唯一内容
-dontwarn com.squareup.okhttp.**

2 个答案:

答案 0 :(得分:10)

它使用反射,因此你需要你的方法名称完整,即。 setAlpha(),在你的proguard配置中是这样的:

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

答案 1 :(得分: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.** { *; }