v7 支持库 ActionBar 的 Android Proguard 配置

Posted

技术标签:

【中文标题】v7 支持库 ActionBar 的 Android Proguard 配置【英文标题】:Android Proguard configuration for the v7 Support Library ActionBar 【发布时间】:2013-08-19 20:25:59 【问题描述】:

我正在使用 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 文件中引用了一些其他所谓的内部类。

【问题讨论】:

【参考方案1】:

我解决了:

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

【讨论】:

你从哪里得到的?谷歌在任何地方都有这个吗? “**”是否意味着递归的所有文件和子文件夹? “”里面的部分是什么(抱歉我不记得了)? 他们不使用它?这很奇怪。 不建议这样做。它将保留所有库类,即使是您不需要的类。见developer.android.com/tools/support-library/setup.html【参考方案2】:

我使用这个,有点类似于 v4 版本的建议:

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

【讨论】:

你在哪里找到关于 v4 的建议? 嗯,我不记得了。如果你用谷歌搜索它,你会发现很多参考资料,包括这里的 SO。也许它没有在任何地方正式建议,我不知道,但它相当合乎逻辑并且它也有效。 :-) 在没有“内部”的情况下添加这两行(例如 android.support.v7.**)解决了我的问题。同样,我为 v4 添加了这些行。 对于使用 EasyShare 小部件(或任何其他小部件)的任何人,您可能也希望添加以下内容:-keep class android.support.v7.widget.** *; 【参考方案3】:

我从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);

希望它会起作用。

【讨论】:

以上是关于v7 支持库 ActionBar 的 Android Proguard 配置的主要内容,如果未能解决你的问题,请参考以下文章

带有 appcompat 库 v7 的 ActionBar(ava.lang.IllegalStateException:您需要使用 Theme.AppCompat 主题)

如何使用V7包中ActionBar

Android 使用命名空间作为库中属性的前缀

从片段内部访问 Toolbar/ActionBar 对象

如何使用V7包中ActionBar

android v7包里的Toolbar,怎么定制图标,字体居中的效果