必须在[proguard.optimize.peephole.ClassMerger]中覆盖方法,如果曾在Android Studio中调用过

时间:2014-06-08 15:45:06

标签: android gradle android-studio proguard

至少看到两个类似的问题,但都考虑了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

......我不知道这意味着什么。

3 个答案:

答案 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将执行所有优化,除了垂直合并类并且水平合并类的优化。

more info here