proguard - AppCompat 不支持 proguard/minify 后的当前主题功能

Posted

技术标签:

【中文标题】proguard - AppCompat 不支持 proguard/minify 后的当前主题功能【英文标题】:proguard - AppCompat does not support the current theme features after proguard/minify 【发布时间】:2015-11-16 16:44:41 【问题描述】:

我已将支持库从 v22.2.1 更新到 v23.0.0,在构建应用程序后(使用 minifyEnabled 为 true)我有“AppCompat 不支持当前主题功能”异常:

08-23 05:46:10.168 19437 19437 E androidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfotm.alashow.dotjpg/tm.alashow.dotjpg.ui.activity.MainActivity: java.lang.IllegalArgumentException: AppCompat does not support the current theme features
08-23 05:46:10.168 19437 19437 E AndroidRuntime:    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
08-23 05:46:10.168 19437 19437 E AndroidRuntime:    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2477)
08-23 05:46:10.168 19437 19437 E AndroidRuntime:    at android.app.ActivityThread.-wrap11(ActivityThread.java)
08-23 05:46:10.168 19437 19437 E AndroidRuntime:    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1345)

在调试应用程序或禁用 proguard (minifyEnabled false) 时,不会抛出异常。 只有在启用 proguard 时才会抛出。

主题:

<style name="Theme.App" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primary_dark</item>
        ...
</style>

Proguard 文件:

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

-keep class android.support.design.widget.**  *; 
-keep interface android.support.design.widget.**  *; 
-dontwarn android.support.design.**
-keep public class * extends android.support.design.widget.CoordinatorLayout$Behavior 
    public <init>(android.content.Context, android.util.AttributeSet);

我已经尝试过这个问题的答案:Upgraded to AppCompat v22.1.0 and now getting IllegalArgumentException: AppCompat does not support the current theme features,我认为这不是重复的问题。

我该如何解决?当然,启用 proguard

【问题讨论】:

你找到解决办法了吗? @bjornson no :( 你有同样的问题还是什么? @bjornson 刚刚降级到旧版本 22.2.1 我想我也必须这样做...谢谢 找到了解决方案 :) 有一个名为 AppTheme 的默认主题优先 - ***.com/a/32616372/380451 【参考方案1】:

错误信息可能具有误导性。注意像这样的 Proguard 警告:

Warning: org.acra.ErrorReporter: can't find referenced method 'void setLatestEventInfo(android.content.Context,java.lang.CharSequence,java.lang.CharSequence,android.app.PendingIntent)' in library class android.app.Notification
Warning: there were 1 unresolved references to library class members.
         You probably need to update the library versions.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)
Exception while processing task 
java.io.IOException: Please correct the above warnings first.
    at proguard.Initializer.execute(Initializer.java:473)
    at proguard.ProGuard.initialize(ProGuard.java:233)
    at proguard.ProGuard.execute(ProGuard.java:98)
    at proguard.gradle.ProGuardTask.proguard(ProGuardTask.java:1074)
    at com.android.build.gradle.tasks.AndroidProGuardTask.doMinification(AndroidProGuardTask.java:139)
    at com.android.build.gradle.tasks.AndroidProGuardTask$1.run(AndroidProGuardTask.java:115)
    at com.android.builder.tasks.Job.runTask(Job.java:48)
    at com.android.build.gradle.tasks.SimpleWorkQueue$EmptyThreadContext.runTask(SimpleWorkQueue.java:41)
    at com.android.builder.tasks.WorkQueue.run(WorkQueue.java:227)
    at java.lang.Thread.run(Thread.java:745)

虽然如果存在来自先前构建的 classes.jar 文件,则构建将成功,但干净的构建将按预期失败。

在我的情况下,修复 Proguard 警告也删除了 AppCompat 异常。

【讨论】:

以上是关于proguard - AppCompat 不支持 proguard/minify 后的当前主题功能的主要内容,如果未能解决你的问题,请参考以下文章

升级到 AppCompat v22.1.0 现在得到 IllegalArgumentException: AppCompat 不支持当前主题功能

关于appcompat_v7包

Android AppCompat 库详解

Android 支持库 v7 缺少 appcompat

Android 如何获取支持操作栏的 AppCompat.Translucent 类型主题?

ProGuard 是不是支持 Java 11?