【问题标题】:How does proguard prevent my NoClassDefFoundError for v7.appcompat on Android 4.3?proguard 如何防止我的 NoClassDefFoundError for v7.appcompat on Android 4.3?
【发布时间】:2015-10-04 06:16:37
【问题描述】:

从 appcompat-v7 版本 20 升级到 21.0.3 后,我的 Android 应用在运行 Android 4.3 的三星 Galaxy Nexus 上启动时开始崩溃。 (它在装有 Android 5.0 的 Galaxy S5 上运行良好)。

这是我的堆栈跟踪的顶部:

java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$attr
        at android.support.v7.app.ActionBarActivityDelegateBase.ensureSubDecor(ActionBarActivityDelegateBase.java:263)
        at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:225)
        at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
        at com.xxx.ui.LoginChoiceActivity.onCreate(LoginChoiceActivity.java:39)

我相信这个问题被报告和讨论到筋疲力尽here。 关于该问题的几位评论者设法在他们的 proguard 配置文件中使用各种 -keep 咒语来解决这个问题。所以我尝试了同样的事情并设法摆脱了崩溃,但我不明白是什么导致了修复。

我使用的是 Android Studio 1.1.0。我在 build.gradle 中添加了以下内容:

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
minifyEnabled true

这是我的 proguard-rules.pro 文件:

# Works regardless of whether this is commented out or not.
#-keep class ** {*;}

# We know these reference classes that we don't have. It's ok.
-dontwarn com.flurry.**,com.millennialmedia.**

-dontoptimize
-dontshrink
-dontobfuscate

我对我不理解的错误修复/解决方法不满意,那么有人知道 ProGuard 为我做了什么吗?

【问题讨论】:

标签: android proguard android-support-library


【解决方案1】:

在你的 proguard-rules.pro 文件中添加这一行,以防止 progurd 支持 supportv7

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

and read this issue

【讨论】:

    猜你喜欢
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2014-08-18
    • 2015-10-04
    相关资源
    最近更新 更多