こんにちは、株式会社Pentagonの山本です。今回、Flutterアプリをリリースしようとしたら、画面が白紙になる不具合に遭遇したため、試行錯誤した内容をまとめておきます。
release環境で実機での動作も問題ありませんでした。なぜか内部テスト時にGoogle Play Storeからアプリをインストールした場合だけ、起動時に白い画面でスタックするという謎現象に遭遇しました。
【こんな人に読んで欲しい】
Androidアプリをリリースしようとしているが、Google Playからインストールすると、起動後画面が白紙になってしまって困っている方。
【この記事を読むメリット】
アプリの起動後に画面が白紙になる問題を解決するヒントが見つかります。
【結論】
原因は特定できなかったのですが、次の対応で解消できました。
- gradleのバージョンを変更
- flutter_secure_storageのバージョンを変更
- アプリのストレージを消してみる
試したこと1|build.gradleのminify等をfalseにしてみる
buildTypes {
release {
....略
shrinkResources false
minifyEnabled false
useProguard false
}
}
参考:https://github.com/flutter/flutter/issues/70558#issuecomment-832566022
この方法では解決しませんでした。build.gradleの設定に関してはあまり知見がないのですが、「圧縮、難読化、最適化」をしない設定にしているようです。なんとなくuseProguardとかfalseにしたくないですね。
試したこと2|gradleバージョンを変更
I thing your problem is your gradle version. a was same problem and I solved it with change gradle version to 3.5.4.
dependencies {
classpath "com.android.tools.build:gradle:3.5.4"
...
}
参考:https://stackoverflow.com/questions/60936332/flutter-release-apk-doesnt-work-just-white-screen
これで一度はアプリが白紙になる問題が直ったのですが、後ほど再発します。
試したこと3|Exceptionが発生していないか確認
fvm flutter run --release -t lib/main-prod.dart --flavor prod --verbose
このコマンドでExceptionが発生していないか確認したところ、次のようなExceptionが発生していました。
Unhandled Exception: PlatformException(Exception encountered, read, javax.crypto.BadPaddingException: error:1e000065:Cipher functions:OPENSSL_internal:BAD_DECRYPT
参考:https://github.com/mogol/flutter_secure_storage/issues/161
flutter_secure_storageが原因だった
flutter_secure_storageのバージョンを3.3.3から3.3.2にダウン
flutter_secure_storage: 3.3.2
main/AndroidManifest.xml
にbackupタグを追加
<application
...
android:allowBackup="false"
android:fullBackupContent="false">
これでExceptionはとりあえず解消しました。
試したこと4|アプリのストレージを一旦消してみる
アプリのストレージを一旦消したら直りました。
参考:https://github.com/mogol/flutter_secure_storage/issues/53#issuecomment-506715829
まとめ
最新のFlutterバージョンに上げることで、最新のライブラリを使えるようになり、こういった不具合に遭遇することもなくなると思います。タイミングをみてFlutterバージョンを上げたいですね。