如何为 ButterKnife 8 配置 ProGuard 设置?
Howto configure ProGuard settings for ButterKnife 8?
我的 Android 应用程序中的 运行 ButterKnife 版本 8.5.1。如果我尝试为 ButterKnife 进行 ProGuard 设置,我的发布版本仍然会崩溃。有一个 issue on the official ButterKnife Github page 告诉您进行以下设置:
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}
或者它被写入使用这些设置:
# Butterknife
-dontwarn butterknife.internal.**
-keep class **$$ViewInjector { *; }
-keepnames class * { @butterknife.InjectView *;}
None 这些适用于我的配置。访问 ButterKnife 绑定的视图时,我仍然遇到崩溃。那么您是否需要为 ButterKnife 8 进行任何新设置?
在 ButterKnife 8 中,自动生成的子类被称为不同的。您可以通过以下方式处理版本 7 和 8 的 ProGuard 设置:
###---------------Begin: proguard configuration for ButterKnife ----------
# For Butterknife:
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
# Version 7
-keep class **$$ViewBinder { *; }
# Version 8
-keep class **_ViewBinding { *; }
-keepclasseswithmembernames class * { @butterknife.* <fields>; }
-keepclasseswithmembernames class * { @butterknife.* <methods>; }
###---------------End: proguard configuration for ButterKnife ----------
尽管我使用的是 @OnClick
方法,但我什至不需要最后一行。这些设置非常适合我。试试吧!
这对我有用:
-keep public class * implements butterknife.Unbinder { public <init>(**, android.view.View); }
-keep public class * implements butterknife.internal.ViewBinder { public <init>(); }
-keep class butterknife.*
-keepclasseswithmembernames class * { @butterknife.* <methods>; }
-keepclasseswithmembernames class * { @butterknife.* <fields>; }
-keep class **$$ViewBinder { *; }
-keep class **$ViewHolder { *; }
-keep class butterknife.**$Finder { *; }
-keep class **_ViewBinding { *; }
如果您有多个库,请确保 butterknife 依赖项位于应用程序的 build.gradle
文件中,或者至少将 annotationProcessor
移入其中。
我的 Android 应用程序中的 运行 ButterKnife 版本 8.5.1。如果我尝试为 ButterKnife 进行 ProGuard 设置,我的发布版本仍然会崩溃。有一个 issue on the official ButterKnife Github page 告诉您进行以下设置:
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}
或者它被写入使用这些设置:
# Butterknife
-dontwarn butterknife.internal.**
-keep class **$$ViewInjector { *; }
-keepnames class * { @butterknife.InjectView *;}
None 这些适用于我的配置。访问 ButterKnife 绑定的视图时,我仍然遇到崩溃。那么您是否需要为 ButterKnife 8 进行任何新设置?
在 ButterKnife 8 中,自动生成的子类被称为不同的。您可以通过以下方式处理版本 7 和 8 的 ProGuard 设置:
###---------------Begin: proguard configuration for ButterKnife ----------
# For Butterknife:
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
# Version 7
-keep class **$$ViewBinder { *; }
# Version 8
-keep class **_ViewBinding { *; }
-keepclasseswithmembernames class * { @butterknife.* <fields>; }
-keepclasseswithmembernames class * { @butterknife.* <methods>; }
###---------------End: proguard configuration for ButterKnife ----------
尽管我使用的是 @OnClick
方法,但我什至不需要最后一行。这些设置非常适合我。试试吧!
这对我有用:
-keep public class * implements butterknife.Unbinder { public <init>(**, android.view.View); }
-keep public class * implements butterknife.internal.ViewBinder { public <init>(); }
-keep class butterknife.*
-keepclasseswithmembernames class * { @butterknife.* <methods>; }
-keepclasseswithmembernames class * { @butterknife.* <fields>; }
-keep class **$$ViewBinder { *; }
-keep class **$ViewHolder { *; }
-keep class butterknife.**$Finder { *; }
-keep class **_ViewBinding { *; }
如果您有多个库,请确保 butterknife 依赖项位于应用程序的 build.gradle
文件中,或者至少将 annotationProcessor
移入其中。