Flutter: cameraパッケージをAndroid13でビルドすると、コントローラーの初期化でエラー
結論:暫定的にtargetSdkVersionだけ32に下げる(GitHubのイシューをウォッチしてバグ解消を待つ)
2022/12/12 Flutter エラー・バグ日記
以前、下記日記で、cameraの初回許可ダイアログ表示後にエラーになる問題の対処法を書いたが、実はAndroid13のエミュレーターでビルドすると、エラーが解消されていないことが分かった。
エラーログは以下のとおり。
E/SurfaceSyncer(30849): Failed to find sync for id=0 ・・・・・・(中略)・・・・・・ E/MethodChannel#plugins.flutter.io/camera_android(30849): Failed to handle method call E/MethodChannel#plugins.flutter.io/camera_android(30849): java.lang.NullPointerException: Attempt to invoke virtual method 'int android.media.EncoderProfiles$VideoProfile.getWidth()' on a null object reference E/MethodChannel#plugins.flutter.io/camera_android(30849): at io.flutter.plugins.camera.features.resolution.ResolutionFeature.configureResolution(ResolutionFeature.java:244) ・・・・・・(以下略)・・・・・・
initializeできない事が問題(許可ダイアログの表示は関係ない)
こちらの日記で書いたエラーは、初回起動時に許可ダイアログが表示され、アプリのライフサイクルが非アクティブになる事が原因だったので、アプリを再起動すれば、問題なくcameraのプレビューを表示できた。
しかし、今回のエラーはアプリを再起動しても解消しないので、許可ダイアログの表示は関係ないと分かった。
単純に、コントローラーを初期化するメソッド
cameraControllerO.initialize();
※「cameraControllerO」は「CameraController」のインスタンス名の例
が機能していない模様。
GitHubのissueに多くのコメントあり
以前も確認したイシューだが、同じ状況の報告だと思われる。
イシュー内のこちらのコメントでは、cameraパッケージを上書きする修正コードのインポートが提案されているが、これを使うとAndroid12で動かなくなると報告されており、採用し難い印象。
同じくイシュー内のこちらのコメントでは、android/app/build.gradleで、
- compileSdkVersion 33
- targetSdkVersion 32
のように、targetSdkVersionだけ32に下げることが提案されている。
確かに、自分のandroid/app/build.gradleは、compileSdkVersion、targetSdkVersionともに33になっていた。
そこで、targetSdkVersionだけ32に下げてみると、確かにエラーが解消された。
compileSdkVersion と targetSdkVersion は、一致させる必要がある思っていたが、
compileSdkVersion ≧ targetSdkVersion
となっていれば、問題ない模様(警告コメントは出るが)。
ただ、こちらのコメントにもあるとおり、targetSdkVersionが32のままだと、いずれGoogle Play Storeで表示されなくなる可能性があり、根本解決にはならなそう。
現時点で、本イシューはオープン中で、エラー報告に「いいね」マークがたくさんいるので、そのうち改善されることを期待。
他のAndroidバージョンでの状況
compileSdkVersion と targetSdkVersion が33であっても、Android11(SDK30)やAndroid12(SDK31)のエミュレーターでビルドすると、エラーにはならなかった。
なので、あくまでtargetSdkVersionが33の状態で、Android13(SDK33)でビルドした場合だけ、エラーが発生する模様。
とりあえず、targetSdkVersion 32で暫定対処しつつ、引き続きこのイシュー情報をウォッチしていこう。
\一般的なエラー対処法をまとめた記事はこちら/
リリースしたアプリ(全てFlutterで開発)
個人アプリ開発で役立ったもの
おすすめの学習教材
\超初心者向けでオススメな元Udemyの講座/
\キャンペーン時を狙えば安価で網羅的な内容が学べる(日本語訳あり)/
\Gitの基礎について無料で学べる/
おすすめの学習書籍
\実用的。image_pickerに関してかなり助けられた/
\Dartの基礎文法を素早くインプットできる/