我通过以下代码为地图标记设置动画:
final Property<Marker, LatLng> property =
Property.of(Marker.class, LatLng.class, "position");
final ObjectAnimator animator =
ObjectAnimator.ofObject(otherMarker, property, typeEvaluator, toLatLng);
这在调试版本中工作正常,但在签名版本中使用以下堆栈跟踪失败:
0
android.util.NoSuchPropertyException: No accessor method or field found for property with name position
1
at android.util.ReflectiveProperty.<init>(ReflectiveProperty.java:71)
2
at android.util.Property.of(Property.java:55)
3
at com.myapp.fragment.MapWrapperFragment.j(MapWrapperFragment.java:1090)
4
at com.myapp.ActivityA.l(ActivityA.java:860)
5
at com.myapp.fragment.FragmentA$22.onClick(FragmentA.java:377)
6
at android.view.View.performClick(View.java:4438)
7
at android.view.View$PerformClick.run(View.java:18422)
8
at android.os.Handler.handleCallback(Handler.java:733)
9
at android.os.Handler.dispatchMessage(Handler.java:95)
10
at android.os.Looper.loop(Looper.java:136)
11
at android.app.ActivityThread.main(ActivityThread.java:5001)
12
at java.lang.reflect.Method.invokeNative(Native Method)
13
at java.lang.reflect.Method.invoke(Method.java:515)
14
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
15
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
16
at dalvik.system.NativeStart.main(Native Method)
这可能是什么原因?我不确定它是否相关,但我使用的是Proguard。
答案 0 :(得分:6)
我偶然发现了同样的问题,但提供的proguard更改并没有为我做。我猜是因为我使用了新的播放服务('com.google.android.gms:play-services-maps:7.0.0'),它们可能有不同的内部结构
对我有用的是:
-keep class com.google.android.gms.** { *; }
答案 1 :(得分:2)
Proguard正在移除或重命名该字段,因为它不知道通过反射进行的任何访问。这就是它在运行时失败的原因。
您应该添加-keep
(或-keepnames
)规则以防止此情况发生。