Proguard - AppCompat не поддерживает текущие функции темы после proguard/minify

Я обновил поддержку libs до v23.0.0 с v22.2.1, после создания приложения (с minifyEnabled true) у меня есть "AppCompat не поддерживает текущие функции темы":

08-23 05:46:10.168 19437 19437 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{tm.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);
}

Я уже пробовал ответы на этот вопрос: Обновлен до AppCompat v22.1.0 и теперь получает IllegalArgumentException: AppCompat не поддерживает текущие функции темы, и я думаю, что это не дублирует вопрос.

Как я могу это исправить? Конечно, с защитой proguard.

Ответ 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.