NineOldAndroids ObjectAnimators не работают с ProGuard и подписанным apk
Я использую ObjectAnimators NineOldAndroids для постепенного исчезновения в маркерах 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
, Как заставить работать анимацию при использовании ProGuard?
Просто для полноты, это единственное содержимое моего proguard-rules.txt
-dontwarn com.squareup.okhttp.**
2 ответа
Он использует отражение, поэтому вам нужны целые имена ваших методов, т.е. setAlpha (), что-то вроде этого в вашей конфигурации proguard:
# This is due to ObjectAnimator using reflection to access get/sets
-keep class com.your.package.ClassThatUsesObjectAnimator { *; }
Библиотека 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.** { *; }