Fing の Wake on LAN 機能を代替する Android アプリ。
- 現在接続中の WiFi サブネットを自動検出
- 1〜254 のIPアドレスを並列スキャン
- 生存確認済みのIPアドレスを一覧表示
- ホスト名取得を試みる(NetBIOS / mDNS)。取得できない場合はIPアドレスを表示
- スキャン結果からデバイスを選択して登録
- 登録時に任意の名前を付けられる
- 登録済みデバイスはアプリ再起動後も保持
- デバイス情報の編集(名前・MACアドレス・ブロードキャストアドレス・ポート)
- デバイスの削除
- 登録済みデバイス一覧にオンライン状態をインジケーターで表示
- 🟢 緑: オンライン
- ⚫ 灰: オフライン/不明
更新タイミング
- アプリ起動時(全デバイスに自動Ping)
- アプリ復帰時(バックグラウンドからフォアグラウンドへ)
- 手動Ping送信時
更新ロジック
- 現在の状態と異なる結果が連続2回続いた場合のみ状態を更新
- 一時的なパケットロス等による誤検知を防止
- アプリ再起動でリセット(DBには保存しない)
- Magic Packet(102バイト)を UDP ブロードキャストで送信
- 宛先:
255.255.255.255、ポート:9(変更可能) - 送信結果を Snackbar で通知
- 1秒間隔で10回 Ping を送信
- 結果をリアルタイムに表示(✅ 成功 / ❌ 失敗・応答時間ms)
- 10回完了後に集計を表示(成功回数・平均応答時間)
- 連続2回同じ結果でon/off状態が変わった時点で即時反映
DeviceListScreen(起動画面)
├── [スキャンボタン] → ScanScreen
│ └── [デバイス登録] → DeviceListScreen(更新)
└── [デバイスタップ] → DeviceDetailScreen
├── [WoL送信ボタン]
├── [Ping送信ボタン]
└── [編集・削除]
| 項目 | 要件 |
|---|---|
| OS | Android 8.0 以上(API 26+) |
| ネットワーク | WiFi 接続必須 |
| WoL対象PC | BIOS/UEFI で Wake on LAN が有効であること |
| WoL対象PC | Windows の高速スタートアップを無効にすること推奨 |
| WoL対象PC | NIC の電源管理で「Magic Packet でのみスタンバイ解除」を有効にすること推奨 |
コントロールパネル → 電源オプション
→ 電源ボタンの動作を選択する
→ 高速スタートアップを有効にする → オフ
デバイスマネージャー → ネットワークアダプター
→ 対象NICを右クリック → プロパティ
→ 電源の管理タブ
→「Magic Packet でのみ、コンピューターのスタンバイ状態を解除できるようにする」にチェック
| 項目 | 内容 |
|---|---|
| 言語 | Kotlin |
| UI | Jetpack Compose |
| 非同期 | Coroutines + Flow |
| DI | Hilt |
| DB | Room |
| 最小SDK | API 26 (Android 8.0) |
| ターゲットSDK | API 36 (Android 16) |
| パーミッション | 用途 |
|---|---|
| INTERNET | LAN通信・WoL送信・Ping |
| ACCESS_WIFI_STATE | サブネット検出 |
| CHANGE_WIFI_MULTICAST_STATE | mDNS(ホスト名取得) |
| ACCESS_NETWORK_STATE | ネットワーク状態確認 |
家庭内LANではホスト名の自動取得が困難なケースがある。
| 手段 | 結果 |
|---|---|
| 逆引きDNS | 家庭内LANでは機能しない |
| NetBIOS NBNS | Windows 10/11 で無効・廃止済みのため機能しない |
| mDNS PTR | Bonjour 未インストール環境では機能しない |
→ 登録時にユーザーが任意の名前を設定することで対応。
UDP はコネクションレスのため、Magic Packet が対象PCに届いたかどうかの確認はできない。Ping で起動を確認すること。
WoL はブロードキャストパケットのため、同一LAN内のデバイスのみが対象。外部ネットワークから起動する場合は VPN またはポートフォワードの設定が別途必要。
IP アドレス復旧には登録済み MAC アドレスが必要。復旧はデバイス詳細画面での Ping 試行が失敗した場合にのみ実行され、登録アドレスの更新には明示的な確認操作が必要。
WolLight は標準的な WoL Magic Packet を送信するだけであり、対象PCが実際に起動できるかどうかは、対象PC側の BIOS/UEFI 設定・NIC の WoL 対応・Windows の電源管理設定(特に高速スタートアップ)に依存する。WolLight 側の不具合ではなく、環境依存の制約として扱う。
動作確認環境では、休止状態からの起動は成功しているが、シャットダウン状態からの起動は確認環境では成功していない。
- MACアドレスベンダー情報の表示(OUIリスト同梱)
- ルーターの DHCP テーブル参照によるホスト名取得
- kapt → KSP への移行(AGP 10.0 対応)
- LocalLifecycleOwner の deprecated 警告対応
- v1.0.4 Release ページを開く。
- Assets から
wol-light-v1.0.4-android.apkをダウンロードする。 - ダウンロードした APK をタップしてインストールする(サイドロード)。Google Play での配布は行っていない。
Android では、このソースからのアプリインストールを許可するよう求められる場合がある。また Google Play Protect や Android が、Google Play 外で配布された APK に対して警告を表示することがある。インストールを進める前に、ダウンロードした APK が上記の公式 GitHub Release から取得したものであることを確認すること。
現在は Pixel 10a でのみ動作確認済み。他の端末での動作は未検証。
# Debug APKを作成
.\gradlew.bat assembleDebug
# JVM unit testを実行
.\gradlew.bat testDebugUnitTest
# Android lintを実行
.\gradlew.bat lintDebugmacOS/Linux では .\gradlew.bat を ./gradlew に読み替える。
WolLight が行う通信は同一LAN内のみで、外部サーバーへのデータ送信は行わない。
- WoL Magic Packet の送信、Ping(到達確認)、ホスト名解決(NetBIOS / mDNS / ARP)はいずれも同一LAN内の通信のみ
- analytics・telemetry・クラッシュレポート機能は実装していない
- 外部HTTPサービスへの通信、クラウド同期は行わない
- 登録したデバイス情報(名前・IPアドレス・MACアドレス・ブロードキャストアドレス・ポート)は端末内のローカルDB(Room)にのみ保存される