2020-02-18に投稿

flutter_local_notificationsでproductionビルドだけエラー

flutter_local_notificationsを使って開発を行い、問題なく動作していたのだが、本番用のビルドを行い動作確認をしてみると、エラーでアプリが落ちてしまった。

ログを見てみると下記のようなエラーが出ていた。

2020-02-18 08:30:15.170 10289-10289/? E/flutter: [ERROR:flutter/shell/platform/android/platform_view_android_jni.cc(39)] java.lang.AssertionError: AssertionError (GSON 2.8.5): java.lang.NoSuchFieldException: Drawable
        at c.a.d.f.a(Unknown Source:54)
        at c.a.d.f.a(Unknown Source:4)
        at c.a.d.f.a(Unknown Source:9)
        at com.dexterous.flutterlocalnotifications.b.d(Unknown Source:32)
        :

丁度通知登録のところで落ちていたし、特に他には特殊なことをしていなかったので多分flutter_local_notifications関連かな……と思って調べてみるとどうもそれっぽい。

結局のところ、通知アイコンとして表示するためのdrawableが存在しない、というエラーっぽい。ちなみにアイコンに指定しているファイル自体はプロジェクトに存在する。

ただ、どうもProGuardの圧縮というか難読化の機能によってproductionビルドのときだけ消えてしまっているのではないかという感じっぽい。多分普通のdrawableであれば問題ないのだが、今回は通知アイコン用に独自の画像を作っていて他では全く使われていないので、削除されているのでは…という気がする(実際はどうか知らないが)。

というか、既知の問題らしく、ちゃんとドキュメントに対処法が書かれていた。

flutter_local_notifications | Flutter Package

android/app/proguard-rules.pro というファイルを作り、そちらに下記を書く。

-keep class com.dexterous.** { *; }

あとは多分build.gradleのbuildTypesのところに下記のように追記する(ここは他で調べたので本当に必要かは分からない)。

    buildTypes {
        release {
            signingConfig signingConfigs.release

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

(参考)
Flutterで初めてのリリースビルド - Qiita

これで再度productionビルドして試したら問題なく動き、通知も送られるようになった。

ツイッターでシェア
みんなに共有、忘れないようにメモ

だら@Crieit開発者

Crieitの開発者です。 主にLAMPで開発しているWebエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, Vue.js, RoR 趣味:Elixir, Phoenix, Node, Nuxt, Express, React等色々

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント