Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Proguard有効でビルドを行ったアプリを起動するとIllegalStateException: You need to use a Theme.AppCompat theme...

More than 5 years have passed since last update.

TL;DR

  • AppCompat v23.1.0でのバグです
  • Proguardの設定にページの下にあるものを付け足してください

症状

Proguardを有効にしたアプリを起動時に

ComponentInfo{com.example.test/com.example.test.activity.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

みたいなエラーが出て起動できなくなってしまいました。

エラーメッセージを確認

You need to use a Theme.AppCompat theme (or descendant) with this activity. (このActivityにはTheme.AppCompatかそれを継承したものを使用してね)と書かれていたので、AndroidManifest.xmlstyles.xmlを確認しました。
MainAcitivtyAppCompatActivityを継承しています。

<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    >
    <activity
        android:name=".activity.MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.FullScreen"
        >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
...
</application>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
</style>

<style name="AppTheme.FullScreen" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
</style>

きちんとTheme.AppCompatを継承したものを使用しています。
そもそも、前におこなったリリースビルドは問題なく起動していますし、このファイルには少なくとも前回リリースビルドを作成した時から手を加えていません。

原因

調べているとAOSPのIssueTrackerにある投稿を見つけました

Bug: appcompat-v7:23.1.0 has dynamic themes issues with proguard
https://code.google.com/p/android/issues/detail?id=190237&

そういえば、ちょうどAppCompatのライブラリを23.1.0にあげていました。

解決方法

上のTrackerにある通り、以下をproguard-rules.proに追加してください

proguard-rules.pro
-keep class com.google.android.gms.** { *; }
-keep public class com.google.android.gms.**
-dontwarn com.google.android.gms.**
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }
ralph
Android App Developer / Android / Minecraft / Xamarin / Java / Kotlin / C#
https://www.ralph.ms/
mspjp
Microsoft製品の楽しさを学生に伝えるために活動する学生団体
http://mspjp.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away