Introduction

忘備録。
Release なり Debug モードでビルドして端末なりエミュレータにデプロイして実行することはできるが、どうやってもデバッグ実行ができない。

コンソールログを見ても、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
I/flutter (19455): Could not start Dart VM service HTTP server:
I/flutter (19455): SocketException: Failed to create server socket (OS Error: Operation not permitted, errno = 1), address = 127.0.0.1, port = 0
I/flutter (19455): #0 _NativeSocket.bind (dart:io-patch/socket_patch.dart:1032:7)
I/flutter (19455): <asynchronous suspension>
I/flutter (19455): #1 _RawServerSocket.bind.<anonymous closure> (dart:io-patch/socket_patch.dart:1812:15)
I/flutter (19455): <asynchronous suspension>
I/flutter (19455): #2 _ServerSocket.bind.<anonymous closure> (dart:io-patch/socket_patch.dart:2097:15)
I/flutter (19455): <asynchronous suspension>
I/flutter (19455): #3 _HttpServer.bind.<anonymous closure> (dart:_http/http_impl.dart:3186:27)
I/flutter (19455): <asynchronous suspension>
I/flutter (19455): #4 Server.startup.startServer (dart:vmservice_io/vmservice_server.dart:468:19)
I/flutter (19455): <asynchronous suspension>
I/flutter (19455): #5 Server.startup (dart:vmservice_io/vmservice_server.dart:487:11)
I/flutter (19455): <asynchronous suspension>

というそっけないエラー。
dart のデバッグ関連ツールが開始できなかったことだけはわかる。

How to resolve?

韓国語の記事だったので DeepL のおかげでよく理解できた。

結論から言えば、android/app/src/debug/AndroidManifest.xml が存在しなかったことが原因だった。
上位のディレクトリにある .gitignoredebug ディレクトリを無視していたことでリポジトリにプッシュされず、別端末でクローンした際に問題発生、というわけである。

問題の AndroidManifest.xml の中身は

1
2
3
4
5
6
7
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

である。
そう、デバッグ時に端末側に android.permission.INTERNET が設定されなかったため、デバッグ実行ができなかったのである。