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"ためObjectAnimator.ofFloatMarker. ProGuard を使用しているときにアニメーションを機能させるにはどうすればよいですか?

完全を期すために、これが私の proguard-rules.txt の唯一の内容です

-dontwarn com.squareup.okhttp.**
4

2 に答える 2

11

リフレクションを使用するため、メソッド名をそのままにする必要があります。つまり、 setAlpha()、プロガード構成で次のようになります。

 # 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 に答える