先了解 Android 上的 VpnService 接管方式
Android 版 Clash 類客戶端通常會透過系統提供的 VpnService 建立本機虛擬網路介面。應用程式啟動服務後,Android 會將符合範圍的網路流量送入這個虛擬介面,再由客戶端核心依照設定中的規則、策略群組與節點處理連線。狀態列出現鑰匙或 VPN 圖示,表示系統正在使用 VPN 通道,並不代表手機直接連線到傳統企業 VPN 伺服器。
這套流程可以分成三層理解。第一層由 Android 系統負責將應用程式流量交給虛擬介面;第二層由 Clash 或 mihomo 核心讀取目標網域、目標位址、連接埠等資訊並比對規則;第三層才是依據 DIRECT、代理節點、拒絕連線或其他策略結果建立實際連線。訂閱提供的節點與規則設定決定第三層如何運作,VpnService 則負責第一層的流量入口。
Android 同一個使用者空間通常只能同時保留一個主要 VPN 服務。若系統已連線至公司 VPN、其他代理客戶端、防火牆或依賴 VpnService 的過濾工具,再啟動 Clash 客戶端時,舊服務可能會被停止,或新服務無法取得 VPN 權限。遇到「點擊啟動後立即停止」時,應先檢查狀態列與系統的 VPN 頁面,而不是反覆更新訂閱。
VpnService 與一般系統代理的差異
一般 HTTP 系統代理仰賴應用程式主動遵循代理設定,部分應用程式、UDP 流量或自行實作網路堆疊的軟體可能會繞過它。VpnService 從系統網路層接收納入範圍的流量,涵蓋範圍通常更完整,因此 Android 客戶端多半採用這種方式。部分客戶端介面會將它稱為 VPN 模式、TUN 模式或服務模式,具體名稱雖然不同,但判斷重點都是:是否建立了 Android 虛擬介面,以及哪些應用程式被納入介面範圍。
這裡的 Android VpnService 與桌面端手動啟用 TUN 並不完全相同。桌面系統可能需要安裝虛擬網卡、調整路由或提升權限;Android 則透過公開的 VPN API 完成授權。使用者首次啟動時看到系統確認對話框屬於正常的權限流程,只有確認後客戶端才能建立通道。
首次啟動時需要確認的關鍵設定
匯入訂閱後,不宜立即將所有異常歸因於省電策略。先確保設定可以載入、節點能夠連線、代理群組已完成選擇,再處理背景常駐。一套穩定的排查順序,可以將設定錯誤與系統限制分開。
- 確認設定處於啟用狀態。設定清單中可能同時儲存多個訂閱或本機 YAML 檔案。更新成功不代表新設定已切換為目前使用的設定,應檢查啟用標記、更新時間與設定名稱。
- 檢查策略群組選擇。設定中的代理群組可能預設選取無法使用的節點,也可能處於自動測速狀態。先選擇一個已完成延遲測試且能建立連線的節點,再測試網頁。
- 接受系統 VPN 授權。首次啟動通常會跳出連線要求。若取消對話框,客戶端可以正常開啟介面,卻無法接管系統流量。
- 確認執行模式。規則模式會依照設定中的規則分流;全域模式通常會讓大部分流量進入指定代理;直連模式則會繞過代理。測試時應記錄目前模式,避免在直連模式下誤判節點失效。
- 查看執行日誌。設定解析失敗、DNS 請求異常、節點握手失敗與網路無法連線通常會留下不同日誌。日誌比單純觀察網頁能否開啟更接近故障位置。
如何設定應用程式分流範圍
不少 Android 客戶端支援「僅代理所選應用程式」或「排除所選應用程式」。前者是白名單思路,只有勾選的應用程式會進入 VpnService;後者是黑名單思路,被勾選的應用程式則維持直連。兩種模式不要只憑名稱猜測,修改前應閱讀目前頁面的說明,並使用一個瀏覽器進行驗證。
支付、銀行、區域網路裝置控制、投放與智慧家庭應用程式是否需要排除,應依實際網路需求決定。排除應用程式後,其連線不會再經過 Clash 規則,因此在日誌中看不到對應請求是預期行為。若瀏覽器可以存取而某個應用程式始終無法連線,應用程式分流清單是優先檢查項目。
鎖定螢幕後斷線的常見原因
「螢幕亮起時正常,鎖定螢幕幾分鐘後無法連線,解鎖並開啟客戶端後又恢復」通常表示設定本身可以運作,但背景服務受到限制、程序被回收,或待機期間網路發生切換。Android 原生 Doze 機制、手機製造商的電量管理、背景啟動限制與記憶體清理都可能參與其中。
Doze 會在裝置靜止、螢幕熄滅並符合條件後,限制背景活動與網路存取。前景服務通常比一般背景程序更不容易被停止,因此客戶端啟動後通常會顯示持續通知。若使用者關閉通知權限、將通知頻道設為不允許,部分系統仍能執行服務,但也有系統會更積極限制無法正常顯示通知的前景服務。建議保留客戶端的執行狀態通知,並避免使用系統清理工具一鍵結束它。
先觀察斷線屬於哪一種情況
- VPN 圖示消失:較可能是 VpnService 被停止、應用程式程序遭清理,或另一個 VPN 服務搶占了系統通道。
- VPN 圖示仍在,但所有連線都失敗:可能是上游網路變更後舊連線未恢復,也可能是節點、DNS 或虛擬介面狀態異常。
- 只有部分應用程式失敗:優先確認應用程式代理範圍、規則命中、IPv6、DNS 與目標應用程式本身的背景限制。
- 從 Wi-Fi 切換至行動數據後失敗:檢查客戶端是否能在網路切換後重新建立連線,以及行動網路是否具備可用的數據權限。
- 開啟客戶端後立即恢復:通常指向背景限制。介面進入前景後,系統重新提供執行機會,服務或核心也隨之恢復。
排查時可以進行可重複的測試:維持相同設定與相同節點,開啟一個可持續重新整理的頁面,鎖定螢幕等待 10 分鐘,再解鎖觀察 VPN 圖示、客戶端執行狀態與日誌時間線。接著分別使用 Wi-Fi 與行動數據重複測試。一次只修改一項設定,才能判斷究竟是哪項省電策略造成影響。
如果日誌在鎖定螢幕期間完全中斷,解鎖後才繼續出現,應重點檢查程序常駐與電池限制。如果日誌持續記錄請求,但大量出現逾時,則應轉向檢查節點可用性、網路切換與 DNS。若服務遭系統停止,部分客戶端會在日誌末尾留下服務銷毀或核心退出資訊;不過程序若被直接終止,日誌可能來不及記錄完整原因。
省電白名單與背景執行設定
不同品牌手機使用的選單名稱不一致,但目標基本相同:允許客戶端在背景持續執行、取消針對該應用程式的電池最佳化,並允許必要的背景網路活動。設定入口可能位於「應用程式資訊」「電池」「應用程式啟動管理」或「特殊應用程式權限」中。
建議依照以下順序調整
- 將電池用量設為不受限制。在客戶端的應用程式資訊中找到電池設定,選擇「不受限制」「允許背景活動」或意思相近的選項。Android 原生系統常見的入口是應用程式資訊中的電池用量管理。
- 關閉自動管理。部分系統提供自動啟動、關聯啟動與背景活動三個開關。關閉自動管理後,依照頁面說明允許客戶端自動啟動及在背景執行。
- 保留前景服務通知。允許客戶端顯示執行通知。通知不僅用於顯示狀態,也與 Android 前景服務機制有關。
- 允許背景數據。檢查行動數據與 WLAN 權限,確保背景數據未被停用。啟用系統數據節省模式時,可將客戶端加入「不受限制的數據用量」清單。
- 在最近使用的工作中鎖定應用程式。部分手機製造商的系統提供工作卡片鎖定功能,可以降低一鍵清理時被結束的機率。它不能取代電池白名單,但可作為補充。
- 重新啟動客戶端服務。權限變更後停止並重新啟動 VpnService;必要時重新啟動手機,再驗證鎖定螢幕與網路切換。
將客戶端設為不受電池最佳化限制,通常會增加一定的背景耗電,因為核心需要維護虛擬介面、DNS 處理與必要的連線狀態。實際耗電量還取決於流量、規則規模、日誌層級、節點協定,以及應用程式是否持續產生網路請求。應先確保連線穩定,再逐項減少不必要的高耗能設定,而不是同時關閉所有背景權限。
開機後是否會自動恢復
客戶端能否隨開機啟動,取決於應用程式是否實作相關功能、系統是否允許自動啟動,以及 VPN 授權與系統策略是否仍然有效。部分 Android 版本提供「永遠開啟的 VPN」選項,可在系統 VPN 設定中指定應用程式;但客戶端是否適合啟用此選項,應以其功能說明為準。
「封鎖未使用 VPN 的連線」屬於更嚴格的系統層級選項。啟用後,如果指定的 VPN 服務尚未建立,裝置可能無法連線網路。除錯設定、切換客戶端或訂閱節點不可用時,這會讓故障表現更加明顯。只有在需要持續強制流量經過 VPN 時才應考慮啟用,並提前確認客戶端能穩定自動啟動並恢復服務。
DNS、私人 DNS 與網路切換問題
背景執行正常並不代表解析鏈路一定正常。Android 的「私人 DNS」使用系統層級的加密 DNS 設定,Clash 設定也可能啟用內建 DNS、Fake-IP 或基於規則的 DNS 處理。兩者在不同客戶端與設定下可能形成不同路徑。出現「可以連線 IP,但網域無法開啟」「部分應用程式一直轉圈」時,應將 DNS 單獨列為檢查項目。
測試時可以暫時將 Android 私人 DNS 調整為自動,再重新啟動客戶端服務。如果問題消失,表示原先指定的私人 DNS 主機、目前網路或設定中的 DNS 路徑可能存在相容性問題。這裡不宜長期依靠隨機切換來解決,而應檢查設定是否明確啟用 DNS、監聽方式是否適合 Android 客戶端,以及規則是否要求解析特定網域。
Fake-IP 模式會為網域回傳保留位址範圍中的對應位址,再由核心還原網域並比對規則。這有利於保留網域資訊並提升規則比對的一致性,但部分區域網路服務、特殊應用程式或依賴真實位址判斷的情境,可能需要加入過濾項目。Redir-Host 等其他模式的解析流程不同,不能直接套用相同的過濾設定。
Wi-Fi 與行動數據切換後的恢復
手機離開 Wi-Fi 後,底層網路、出口位址與 DNS 環境都會改變。客戶端需要感知預設網路變更,並讓後續連線使用新的網路。如果切換後 VPN 圖示仍在但無法存取,可以先等待幾秒,再在客戶端內停止並啟動服務。若每次切換都必須手動重新啟動,應檢查客戶端版本、背景網路權限與系統對 VPN 的限制。
同時啟用雙 SIM、數據節省、熱點分享或區域網路存取時,問題會更加複雜。熱點裝置的流量是否經過手機上的 VpnService,會受到 Android 版本、手機製造商實作與客戶端能力影響,不能只因手機本身已使用代理,就推斷熱點流量也已被接管。需要分別在手機與熱點終端測試出口與 DNS。
日誌定位與完整排查順序
Android Clash 客戶端的日誌通常包含規則命中、連線目標、所選策略、DNS 處理與錯誤資訊。排查時可以暫時將日誌層級調至資訊或除錯,但長期開啟詳細日誌會增加寫入與處理負擔。完成記錄後應恢復日常層級。
常見日誌線索
timeout或連線逾時:目標無法連線、節點回應緩慢、網路切換尚未恢復,或 DNS 請求未完成。connection refused:目標連接埠明確拒絕連線,也可能是本機監聽或上游服務尚未啟動。- 設定解析錯誤:需要檢查 YAML 縮排、欄位格式、訂閱轉換結果,或目前核心不支援的設定項目。
- 持續命中
DIRECT:目前規則將流量判定為直連,應核對規則順序、模式與目標網域。 - 沒有任何目標應用程式日誌:應用程式可能被排除在 VpnService 外,或其流量未進入目前的客戶端。
需要進一步確認系統是否停止了程序時,可以使用 Android 開發者工具查看裝置日誌,但這屬於進階方法。連接電腦並授權除錯後,可依應用程式套件名稱、VPN 服務與程序狀態篩選資訊。不同客戶端的套件名稱不同,應從應用程式資訊或安裝套件資訊中確認,不能直接套用其他軟體的套件名稱。
adb shell dumpsys vpn
adb shell dumpsys deviceidle
adb shell dumpsys activity services
dumpsys vpn 可協助查看目前 VPN 狀態,dumpsys deviceidle 用於觀察裝置閒置與 Doze 情況,服務清單則有助於確認目標程序與服務是否仍存在。這些命令的輸出會隨 Android 版本變化,適合用來驗證現象,不應將某一行固定輸出視為所有裝置都適用的結論。
建議的排查流程
- 在前景固定使用一個已驗證的節點,確認規則模式下可以正常存取。
- 確認系統 VPN 圖示存在,並檢查沒有其他 VPN、防火牆或代理工具占用通道。
- 查看目標應用程式是否已納入應用程式代理範圍。
- 關閉螢幕進行定時測試,記錄 VPN 圖示、日誌中斷時間與恢復方式。
- 將客戶端加入電池最佳化白名單,允許背景活動、背景數據與執行通知。
- 分別測試 Wi-Fi、行動數據,以及兩者之間的切換。
- 若只有網域請求失敗,再檢查私人 DNS、設定中的 DNS 模式與 Fake-IP 相容項目。
- 仍然異常時,備份必要設定,更新至仍受維護的客戶端版本,並使用相同訂閱重新測試。
如果更新客戶端後出現設定無法載入,不應直接將舊設定中的所有欄位複製到新核心。Clash Meta(mihomo)在相容傳統 Clash 設定的基礎上,擴充了規則與協定能力,但不同客戶端封裝的核心版本、欄位支援與預設行為可能不同。應先閱讀客戶端的錯誤日誌,定位具體欄位,再參考對應核心文件進行調整。
穩定執行後的耗電最佳化
連線穩定後,可以從日誌、測速頻率與不必要的背景請求著手控制耗電。頻繁進行所有節點的延遲測試會同時建立大量連線;過短的訂閱自動更新週期也會增加喚醒次數。自動測速群組的測試間隔應依實際使用情況調整,不需要為了追求每分鐘最新結果而持續探測所有節點。
規則數量本身通常不是唯一的耗電來源,更值得關注的是持續活躍的應用程式、連線重試、DNS 循環失敗與詳細日誌。如果某個失效節點被策略群組持續選中,背景應用程式可能不斷重新連線,既影響使用體驗也增加耗電。日誌中出現密集的重複錯誤時,應先更換節點或修正規則。
省電白名單的目標是讓 VpnService 在需要時可靠執行,而不是要求客戶端永久維持高活動狀態。合理設定下,沒有流量時核心可以減少工作;產生連線時再完成規則比對與轉發。透過系統電池統計觀察一整天的數據,比短時間盯著瞬時百分比更具參考價值。
最後可以保留一套簡潔的基準設定:一個穩定設定、明確的規則模式、必要的應用程式代理範圍、允許背景執行、正常顯示前景通知,並記錄私人 DNS 與客戶端 DNS 的組合。之後遇到鎖定螢幕斷線時,先回到這套基準設定重新測試,再判斷是系統更新、客戶端版本還是訂閱設定發生變化。
繼續設定 Android Clash 客戶端
先選擇適合 Android 的客戶端,再依照使用指南匯入訂閱、檢查代理模式與系統 VPN 授權。