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 主题)