Android版Clashを安定動作させる方法:VpnService権限とバッテリー最適化除外設定
Android版クライアントがVpnServiceで仮想NICを構築する仕組みを解説。VPN権限の許可、バッテリー最適化の解除、メーカー独自の省電力ホワイトリスト登録を順に説明し、バックグラウンド切断や通知消失を解決します。
なぜAndroid版はVpnServiceが不可欠なのか
デスクトップOSではClashコアがTUNモードで仮想NICを作成し、システムのルーティングテーブルと連携して全トラフィックをプロキシプロセスへ流し込みます。一方Androidはサンドボックスによるセキュリティ制約があり、一般アプリはシステムのルーティングテーブルを直接操作したり、生のTUNデバイスを作成する権限を持ちません。唯一の正規の入口がシステム提供のVpnService APIです。クライアントは「仮想VPN接続」の確立をシステムに要求し、システムは一度だけ許可ダイアログを表示します。ユーザーが同意すると、アプリはファイルディスクリプタを取得でき、そこに流れるパケットを読み書きすることで、ソフトウェア的に仮想NICを模倣します。
この仕組みが理由で、Android向けのClashクライアント(Clash Meta for Android、FlClashなど)は画面上で「TUN起動」ではなく「VPN起動」と表記されることが多くなっています。裏側の原理は同じで、全体または個別アプリ単位で一致したトラフィックを横取りし、mihomoコアへ渡して処理させ、ルールに従ってノードへ振り分けています。この仕組みを理解しておくと、「起動しても反応がない」「アイコンが一瞬点いてすぐ消える」といった問題に遭遇したとき、権限とバッテリー最適化のどちらを疑うべきか判断しやすくなります。
注意点として、同一端末上でシステムが同時にアクティブにできるVpnServiceは1つだけです。もし他のVPNアプリや、一部ブラウザに搭載された「セキュアブラウジング」機能がインストールされている場合、Clash起動前に完全終了しているか確認してください。そうしないと2つのアプリが仮想NICを奪い合い、許可ダイアログが何度も表示されるのに接続が確立しない現象が起こります。
インストール直後の権限許可とネットワーク設定
クライアントを新規インストールしたら、以下の順序で一度だけ設定を済ませておくと、後からのトラブルシューティングで手間取らずに済みます。
- クライアントを開き、サブスクリプションリンクを読み込んでノード一覧が正常に表示されるか確認します。まずアプリ内でレイテンシテストを行い、サブスクリプション自体の問題を切り分けます。
- 起動ボタンをタップすると、システムが「このアプリにVPN接続の作成を許可しますか」というダイアログを表示するので、「OK」または「許可」をタップします。この確認は初回起動時、またはシステム側で権限がリセットされた場合のみ表示され、許可後はステータスバーに鍵またはギアのアイコンが常時表示され、VPNトンネルが確立していることを示します。
- クライアント設定内の「通知の許可」を確認します(Android 13以降は通知権限を別途許可する必要があります)。常駐通知の表示を許可しておくことは、バックグラウンドプロセスがシステムに誤って停止されないための重要な前提条件の一つです。
- クライアントに「バッテリー最適化の除外」や「自動起動の管理」への導線が用意されている場合は、そこから直接ジャンプする方が、システム設定を自分でたどるより手順の漏れを防げます。
バッテリー最適化と省電力ホワイトリスト:メーカー別の設定手順
Androidの標準バッテリー管理は、アプリがバックグラウンドに入ってから一定時間後にネットワークアクセスやCPUのウェイクアップを制限します。VPN系アプリは特に「バックグラウンドでの異常な電力消費」として扱われやすい対象です。Clashを長時間安定してバックグラウンドで動かすには、システムのバッテリー最適化対象から除外し、さらにメーカー独自のカスタムOSでは追加で省電力ホワイトリストに登録することが重要です。以下は代表的なOSバージョンでの設定パスですが、実際のメニュー名はOSの更新によって多少変わる場合があります。
- 標準Android/一部メーカー端末:設定 → アプリ → 対象のクライアントアプリを選択 → バッテリー → 「制限なし」を選択します。デフォルトの「最適化済み」のままにしないでください。
- 一部メーカーのカスタムOS:設定 → バッテリー → アプリの起動管理/スマート省電力から、対象アプリの「自動起動」「連動起動」「バックグラウンド活動」の3項目を手動でオンにします。システムの自動管理任せにしないでください。
- 別のメーカーのカスタムOS:設定 → バッテリーとパフォーマンス → その他のバッテリー設定 → アプリのスマートコントロールから、対象クライアントを探してスマートコントロールをオフにします。
- さらに別のメーカーのカスタムOS:設定 → アプリ管理 → 対象クライアント → 権限管理から、「バックグラウンドでの画面表示」「自動起動」「連動起動」の権限をすべてオンにし、バッテリー設定でもアプリを「制限なし」グループに追加します。
ホワイトリストへの登録が終わったら、すぐに「効果があった」と判断せず、10〜15分ほど画面ロックした状態で放置してから解除し、接続状態を確認することをおすすめします。システムのバックグラウンド回収処理は遅延して発動することが多く、短時間のテストでは誤った判断につながりやすいためです。
バックグラウンド切断・通知消失のトラブルシューティング
上記の手順を設定しても切断が発生する場合は、以下の順で一つずつ確認してください。
- 通知欄にあるVPN接続を示す常駐通知が残っているか確認します。通知が消えていてもステータスバーの鍵アイコンが残っている場合は、通知権限だけがシステムに個別に取り消されているケースが多いため、通知設定で再度許可すればアプリを再起動する必要はありません。
- システムの「最近使用したアプリ」一覧で、対象クライアントに個別のロック設定(一部OSでは最近使用したアプリのカードに鍵アイコンが表示されます)があるか確認します。ロックしておくと、システムがバックグラウンドのクリーンアップを行う際に他のアプリと一緒に終了されるのを防げます。
- システムレベルの「ディープスリープ」や「超省電力」モードがオンになっていないか確認します。この種のモードは特定条件(画面オフが一定時間続いた、バッテリー残量が閾値を下回ったなど)で、ホワイトリスト外のアプリのネットワークアクセスをまとめて停止することがあり、個別にバッテリーホワイトリストを設定していても上書きされる場合があります。この場合はクライアントを該当モードの例外リストに追加で登録する必要があります。
- システム標準のメモリクリーナーやサードパーティのセキュリティ管理アプリを使用している場合、それらに独自の「プロセス保護」リストがあるか確認してください。この種のツールのクリーンアップ処理はシステムのバッテリー設定とは独立して動作することが多く、公式のホワイトリスト設定を済ませたのに切断が続く隠れた原因になりがちです。
- ルーティングモードの設定を確認します。クライアントで「グローバルプロキシ」と「ルールベースプロキシ」を切り替えてテストする場合、切り替え後はホットスイッチに頼らず、いったんアプリを完全終了してから再起動することをおすすめします。一部のバージョンではモード切替後に仮想NICが再構築されず、一部アプリの通信が空振りする不具合があります。
デスクトップ版との違い:同じルールを移してもなぜ挙動が変わるのか
デスクトップ版で調整済みの設定ファイルをそのままAndroid版クライアントに読み込んだのに、ルールの判定結果が完全には一致しないケースがよくあります。これは設定ミスではなく、モバイル環境そのものがより複雑であることが原因です。システムはWi-Fiとモバイルデータの間で自動的に切り替わり、切り替えの瞬間には仮想NICのルーティング状態を再構築する必要があるため、その間の一部通信が一時的にプロキシを経由せず直接通信になることがあります。さらに一部メーカーのカスタムOSに搭載された「マルチネットワーク最適化」機能が、より速い経路を積極的に探索する動作をし、VpnServiceのトラフィック横取りロジックと一時的に競合することもあります。ネットワーク切り替え後に短時間だけ効果が切れる場合は、通常は数秒待ってルーティングの再構築が完了すれば復旧するため、設定を再読み込みする必要はありません。