Android Proguard配置v7 Support Library ActionBar

29

我正在使用v7支持库在Android 2.x上显示ActionBar。它可以正常工作,但在启用Proguard后,我不得不修复一些类/方法未找到的错误。

有没有关于需要保留哪些类的指南?

到目前为止,我已经有以下这些:

-keep public class android.support.v7.internal.widget.ActionBarContainer
-keep class android.support.v7.internal.widget.ActionBarView$HomeView
-keep public class android.support.v7.internal.widget.ActionBarContextView

现在看起来工作正常,但我并不十分自信它不会因为某个 XML 文件中引用了一些被认为是内部类的其他类而在某个阶段崩溃。

3个回答

52

我用以下方法解决了它:

-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }

你从哪里得到的?谷歌上有这个吗? "**" 是指所有文件和子文件夹,递归地吗? "{}" 中的部分是什么(抱歉我不记得了)? - android developer
1
他们不使用它?那很奇怪。 - android developer
6
不建议这样做,它会保留所有库类,即使你不需要。请参阅http://developer.android.com/tools/support-library/setup.html。 - HyBRiD

4

我使用的方法与v4版本提供的有些类似:

-keep class android.support.v7.internal.** { *; }
-keep interface android.support.v7.internal.** { *; }

2
你在哪里找到v4的建议的? - Mirko N.
嗯,我记不清了。如果你在谷歌上搜索它,你会找到很多参考资料,包括在这里的SO。也许它并没有正式被建议过,我不知道,但这相当合理,而且也行得通。 :-) - Gábor
添加这两行代码,但不要包含“internal”(例如android.support.v7.**),这样可以解决我的问题。同样地,我也为v4添加了这些代码。 - Miloš Černilovský
对于使用EasyShare小部件(或任何其他小部件)的任何人,您可能还想添加以下内容: -keep class android.support.v7.widget.** { *; } - stealthcopter

0

我从Android Proguard Snippet获取了它。

-keep public class android.support.v7.widget.** { *; }
-keep public class android.support.v7.internal.widget.** { *; }
-keep public class android.support.v7.internal.view.menu.** { *; }

-keep public class * extends android.support.v4.view.ActionProvider {
    public <init>(android.content.Context);
}

希望它能够正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接