我一直在使用Butterknife构建一个Android应用程序,最近升级到7.0.1。我用新的@Bind
功能替换了所有的@InjectView
和ButterKnife.inject
的使用,并且在调试构建时没有问题,但是在启动发布构建时应用程序崩溃。
如果我在构建中将' minifyEnabled
'切换为false。那么我就可以生成一个可以工作的发布版本了。
我正在使用Butterknife网站上记录的proguard配置,但它似乎不适合我。我也使用dagger,毕加索和Flurry在我的构建。
我proguard-rules。专业内容:
# 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.**
我们在升级到7.0.1后遇到了类似的问题,但是我们得到了一个ANR。
问题似乎是因为我们用Butterknife网站的新推荐选项替换了Proguard的Butterknife部分。
添加-keepnames class * { @butterknife.Bind *;}
到proguard文件已经解决了我们的问题。
从网站,http://jakewharton.github.io/butterknife/这似乎为我工作:
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}