Подтвердить что ты не робот

Почему 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.**
4b9b3361

Ответ 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>;
}