为什么Butterknife @Bind在发布版本中失败(在proguard之后)



我一直在使用Butterknife构建一个Android应用程序,最近升级到7.0.1。我用新的@Bind功能替换了所有的@InjectViewButterKnife.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>;
}

相关内容

  • 没有找到相关文章

最新更新