11

I've been building an Android app using Butterknife and recently upgraded to 7.0.1. I replaced all the @InjectView and ButterKnife.inject usage with the new @Bind feature and have no problems with debug builds but the app crashes on startup for release builds.

If I switch 'minifyEnabled' to false in my build.gradle then I can generate a working release build.

I'm using the proguard configuration thats documented on the Butterknife site but it doesn't appear to be working for me. I'm also using Dagger, Picasso and Flurry in my build.

My proguard-rules.pro contents:

# 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.**
4

2 回答 2

11

升级到 7.0.1 后我们遇到了类似的问题,但我们得到了 ANR。

问题似乎是因为我们用 ButterKnife 网站上的新推荐选项替换了 Proguard 的 Butterknife 部分。

添加-keepnames class * { @butterknife.Bind *;}到 proguard 文件已经解决了我们的问题。

于 2015-07-08T06:43:37.037 回答
7

从网站http://jakewharton.github.io/butterknife/这似乎对我有用:

-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }

-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}

-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}
于 2015-09-08T05:53:12.510 回答