要約
- デバッグモードでリクエスト飛ばせたのに、リリースビルドだと表題のエラーが出る
- ちゃんと
<uses-permission android:name="android.permission.INTERNET" />
を付与しよう! - 公式ドキュメントを、見よう
事例と原因、対策
Flutterアプリでhttp
など通信を行うアプリを作っている時に気を付けたい事例です。
デバッグビルドやiOSのリリースビルドでは問題なく動いたのに、リリースビルドのAndroidのみ通信部分でエラーが起きる場合があります。
エラー内容としては以下の通りです
SocketException: Failed host lookup: 'xxxxxxx' (OS Error: No address associated with hostname,)
原因としては、インターネットに関するパーミッションが付与されていないことでした。
Android開発を経験した人にはお分かりだと思いますが、Androidではネットワークを使用するためには
<uses-permission android:name="android.permission.INTERNET" />
をAndroidManifest.xmlに付与しないといけません。
しかしながらflutterのデバッグモードでは、このパーミッションを付与せずともネットワークが使用可能になっています。
https://flutter.dev/docs/deployment/android#reviewing-the-app-manifest
Flutterから入った人、Android開発経験が久しぶりな人には、ついうっかり起きてしまうのではないでしょうか。
Flutterの公式ドキュメントは内容が豊富なので(ただし英語)しっかり活用していきたいところです。