はじめに
Android でアプリを作ってデプロイするとき、わざわざ USB で繋がないといけないの面倒くさくないですか!
ADB を使ってデプロイするわけですが、実は ADB は WiFi で端末と接続できます!
じゃあ、Delphi でも WiFi でデプロイすれば良いのでは~!?
準備
ADB に端末と WiFi で繋がってね、とお願いします。
この作業は、Windows を再起動したりして ADB のサービスが起動した時や、端末の IP が変わった時に必要です。
(この後は ADB のサービスが起動している限り有効です)
ですので、その日の開発始める最初にやる感じですかね。
以下のバッチファイルで、この設定が完了します!
全自動です!
※ChatGPT 作
※長いのでコードを折りたたんでいます
↓↓↓
ADB WiFi Connect
@echo off
setlocal EnableExtensions EnableDelayedExpansion
REM ==================================================
REM ADB のパスを設定してください
REM ==================================================
set "REAL_ADB=C:\Android\SDK\platform-tools\adb.exe"
set "PORT=5555"
"%REAL_ADB%" start-server
set "FOUND=0"
set "SUCCESS=0"
set "FAILED=0"
set "CONNECTED_COUNT=0"
REM ==================================================
REM USB 接続されている端末だけを対象にする
REM WiFi ADB 接続済みの 192.168.x.x:5555 は除外する
REM ==================================================
for /f "skip=1 tokens=1,2" %%A in ('"%REAL_ADB%" devices') do (
if "%%B"=="device" (
echo %%A | find ":" >nul
if errorlevel 1 (
set /a FOUND+=1
call :setup_device "%%A"
if errorlevel 1 (
set /a FAILED+=1
) else (
set /a SUCCESS+=1
)
)
)
)
echo.
echo ==============================
echo Result
echo USB devices : !FOUND!
echo Success : !SUCCESS!
echo Failed : !FAILED!
echo ==============================
echo.
echo ==============================
echo Connected WiFi devices
echo ==============================
if "!CONNECTED_COUNT!"=="0" (
echo None
) else (
for /l %%N in (1,1,!CONNECTED_COUNT!) do (
echo USB !CONNECTED_USB_%%N! -^> WiFi !CONNECTED_WIFI_%%N!
)
)
echo.
REM 必要なら全 ADB 接続一覧も表示
REM echo ==============================
REM echo All ADB devices, including USB
REM echo ==============================
REM "%REAL_ADB%" devices
REM echo.
echo 何かキーを押すと終了します
pause >nul
exit /b 0
REM ==================================================
REM 指定された USB 端末を WiFi ADB 接続に切り替える
REM %1 = USB serial
REM ==================================================
:setup_device
set "USB_SERIAL=%~1"
set "DEVICE_IP="
echo.
echo ==============================
echo USB device: %USB_SERIAL%
echo ==============================
REM ==================================================
REM WiFi の IP アドレスを取得
REM ==================================================
for /f "usebackq tokens=2,4" %%A in (`
"%REAL_ADB%" -s %USB_SERIAL% shell ip -o -4 addr show scope global
`) do (
echo %%A | findstr /B /C:"wlan" >nul
if not errorlevel 1 (
for /f "tokens=1 delims=/" %%I in ("%%B") do (
set "DEVICE_IP=%%I"
goto :got_ip
)
)
)
:got_ip
if "%DEVICE_IP%"=="" (
echo WiFi の IP アドレスを取得できませんでした
echo 端末が WiFi に接続されているか確認してください
exit /b 1
)
set "WIFI_SERIAL=%DEVICE_IP%:%PORT%"
echo WiFi IP: %DEVICE_IP%
echo TCP/IP モードに切り替え中...
"%REAL_ADB%" -s "%USB_SERIAL%" tcpip %PORT%
if errorlevel 1 (
echo TCP/IP モードへの切り替えに失敗しました
exit /b 1
)
timeout /t 2 >nul
echo WiFi 接続中...
"%REAL_ADB%" connect "%WIFI_SERIAL%"
if errorlevel 1 (
echo WiFi 接続に失敗しました: %WIFI_SERIAL%
exit /b 1
)
echo 接続完了: %WIFI_SERIAL%
REM ==================================================
REM 今回このバッチで接続した対応関係を記録する
REM 空白区切りのリストではなく、疑似配列にする
REM ==================================================
set /a CONNECTED_COUNT+=1
set "CONNECTED_USB_!CONNECTED_COUNT!=%USB_SERIAL%"
set "CONNECTED_WIFI_!CONNECTED_COUNT!=%WIFI_SERIAL%"
exit /b 0
実行方法
- 端末を USB で接続
- 上記のバッチファイル ADB_WiFi_Connect.bat を実行
これを実行すると WiFi 経由でアプリをデプロイできます!
Delphi は内部で ADB を呼んでいるだけなので、ADB が WiFi 接続されていれば、ワイヤレスで使えます。
iOS も教えてよ!
iOS は何もしなくても WiFi で繋がります!
実は、実機デバッグは Xcode 17 以降では仕組みが変わっています。
従来は「ケーブル接続」か「WiFi 接続(Connect via network)」を明示的に切り替える必要がありましたが、現在、その設定は不要になりました。
Xcode 17 以降は常にネットワーク経由で実機と通信しています(ケーブル接続の場合でも「USB ネットワーク」として通信しています)。
そのため、特別な設定をしなくても WiFi 経由でデプロイ可能です。
ただし、最初の 1 回だけはケーブルを繋いで Xcode にデバイスを認識させる必要があります。
この初回接続さえ完了すれば、ケーブルなしで自動的に接続されます。
ですが…
Delphi では PAServer / Xcode Command Line Tools のせいでケーブル無し接続ができません!!!!!!
具体的には、PAServer はケーブルが繋がっていないとターゲットデバイスを認識できないため、ワイヤレスだとデバイスが表示されずデプロイできません!!
ターゲットデバイスが表示された後はケーブル抜いても大丈夫ですけどね…
まとめ
Android は ADB の機能でワイヤレスでデプロイできます。
iOS は PAServer のせいでワイヤレスだと端末が認識できません。
(端末を認識した後はワイヤレスでデプロイできます)
終わりに
USB ケーブルで端末と接続するの地味にストレスだったんですよね。
取り回しづらくなるし、机の上がケーブルだらけになるし…
ということで、Android アプリを開発している方はワイヤレスで開発してみてください!
ちなみに、ケーブルだらけ対策としてこんなことしてます。
Owltech の片引き巻取りケーブル、良いぞ!台座も付いてて机の上が片付くよ! pic.twitter.com/AFNRG5kipd
— HOSOKAWA Jun (@pik) April 3, 2026
おまけ
切断用スクリプト
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "REAL_ADB=ADBのパスを指定"
"%REAL_ADB%" start-server
set "COUNT=0"
for /f "skip=1 tokens=1,2" %%A in ('"%REAL_ADB%" devices') do (
if "%%B"=="device" (
echo %%A | find ":" >nul
if not errorlevel 1 (
echo Disconnect: %%A
"%REAL_ADB%" disconnect %%A
set /a COUNT+=1
)
)
)
echo.
echo ==============================
echo Disconnected WiFi devices: %COUNT%
echo ==============================
echo.
"%REAL_ADB%" devices
pause

