Почему Butterknife @Bind не работает в выпуске (после proguard)
Я создаю приложение для Android с использованием Butterknife и недавно обновил его до 7.0.1. Я заменил все использование @InjectView
и ButterKnife.inject
новой функцией @Bind
и не обнаружил проблем с сборками отладки, но при сбоях приложения при сбое приложения происходит сбой.
Если я переключу 'minifyEnabled
' на false в моем build.gradle, тогда я могу создать рабочую сборку выпуска.
Я использую конфигурацию proguard, которая зарегистрирована на сайте Butterknife, но, похоже, она не работает для меня. Я также использую Кинжал, Пикассо и Флеш в моей сборке.
Содержимое моей proguard-rules.pro:
# ButterKnife
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}
# Dagger
-keepclassmembers,allowobfuscation class * {
@javax.inject.* *;
@dagger.* *;
<init>();
}
-keep class javax.inject.** { *; }
-keep class **$$ModuleAdapter
-keep class **$$InjectAdapter
-keep class **$$StaticInjection
-keep class dagger.** { *; }
# Picaso
-dontwarn com.squareup.okhttp.**
# Flurry
-keep class com.flurry.** { *; }
-dontwarn com.flurry.**
Ответы
Ответ 1
У нас были подобные проблемы после обновления до 7.0.1, но вместо этого мы получили ANR.
Проблема заключается в том, что мы заменили раздел Butterknife Proguard новыми рекомендованными вариантами на веб-сайте ButterKnife.
Добавление -keepnames class * { @butterknife.Bind *;}
в файл proguard устраняет наши проблемы.
Ответ 2
На веб-сайте http://jakewharton.github.io/butterknife/ это показалось мне полезным:
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}