至少看到两个类似的问题,但都考虑了eclipse非gradle构建。
我正在尝试使用gradle组合发布:
./gradlew myapp:assembleRelease --stacktrace
除了最新的Google proguard示例,我的proguard.txt包含:
# ButterKnife
-keep class *$$ViewInjector{}
-dontwarn butterknife.Views$InjectViewProcessor
-dontwarn butterknife.internal.**
#JodaTime
-dontwarn org.joda.time.**
#Apache
-dontnote org.apache.**
-dontwarn org.apache.**
这似乎消除了所有的警告,但现在正在与神秘的
挣扎Caused by: java.lang.UnsupportedOperationException: Method must be overridden in [proguard.optimize.peephole.ClassMerger] if ever called
......我不知道这意味着什么。
答案 0 :(得分:5)
我有同样的问题,从未发现问题的根源。我确实发现如果你在proguard文件中添加规则来跳过优化,它会阻止构建错误的发生。
-dontoptimize
答案 1 :(得分:1)
以下是这3个库的正确proguard配置:
# ButterKnife
-dontwarn butterknife.internal.**
-keep class **$$ViewInjector { *; }
-keepnames class * { @butterknife.InjectView *;}
#JodaTime
-dontwarn org.joda.time.**
#Apache
-keep public class org.apache.commons.io.**
-keep class org.apache.** { *; }
-dontnote org.apache.**
-dontwarn org.apache.**
不确定这是否是gradle更新,但不再发生
答案 2 :(得分:1)
-dontoptimize
指定不优化输入类文件,我是
不确定是否禁止优化是一个好主意,更好
启用或禁用个别优化。
在您的情况下,您可以使用-optimizations
optimization_filter
-optimizations !class/merging/vertical*,!class/merging/horizontal*
Proguard将执行所有优化,除了垂直合并类并且水平合并类的优化。