5

我正在使用 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.ofFloatMarker. 使用 ProGuard 时如何使动画正常工作?

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

-dontwarn com.squareup.okhttp.**
4

2 回答 2

11

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

 # This is due to ObjectAnimator using reflection to access get/sets
 -keep class com.your.package.ClassThatUsesObjectAnimator { *; }
于 2014-03-01T21:25:51.947 回答
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.** { *; }
于 2014-12-20T20:26:45.927 回答