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

wel*_*ell 5 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();
Run Code Online (Sandbox Code Playgroud)

这与apk的可调试版本完美配合.

然而,当我签我的APK,并搭配使用ProGuard,突然标记不褪色.我的猜测是,阿尔法属性已经被混淆,使传递"alpha"ObjectAnimator.ofFloat不符合的混淆的阿尔法属性相匹配Marker.使用ProGuard时如何让动画工作?

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

-dontwarn com.squareup.okhttp.**
Run Code Online (Sandbox Code Playgroud)

Blu*_*ell 10

它使用反射,所以你需要你的方法名称完整,即setAlpha(),在你的proguard配置中这样的东西:

 # This is due to ObjectAnimator using reflection to access get/sets
 -keep class com.your.package.ClassThatUsesObjectAnimator { *; }
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我去了`-keepclassmembers class com.google.android.gms.maps.model.Marker { *; }`。您可以更新答案,还是应该保留使用 ObjectAnimator 的个人课程? (2认同)