为什么 Butterknife @Bind 在发布版本中失败(在 proguard 之后)
Why does Butterknife @Bind fail in release build (after proguard)
我一直在使用 Butterknife 构建 Android 应用程序,最近升级到 7.0.1。我用新的 @Bind
功能替换了所有 @InjectView
和 ButterKnife.inject
用法,调试版本没有问题,但应用程序在启动时崩溃以发布版本。
如果我在我的 build.gradle 中将“minifyEnabled
”切换为 false,那么我可以生成一个工作发布版本。
我正在使用 Butterknife 网站上记录的混淆器配置,但它似乎对我不起作用。我还在我的构建中使用 Dagger、Picasso 和 Flurry。
我的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.**
我们在升级到 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>;
}
我一直在使用 Butterknife 构建 Android 应用程序,最近升级到 7.0.1。我用新的 @Bind
功能替换了所有 @InjectView
和 ButterKnife.inject
用法,调试版本没有问题,但应用程序在启动时崩溃以发布版本。
如果我在我的 build.gradle 中将“minifyEnabled
”切换为 false,那么我可以生成一个工作发布版本。
我正在使用 Butterknife 网站上记录的混淆器配置,但它似乎对我不起作用。我还在我的构建中使用 Dagger、Picasso 和 Flurry。
我的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.**
我们在升级到 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>;
}