與主機共享檔案
02 x86_64 方案:BlissOS 硬碟開機與資料碟 與 03 arm64 方案:PixelOS GSI 虛擬機 的共同延伸。方法兩條路線一樣,只有主機位址不同。
前提:先確定主機位址
| UTM 網路模式 | 客體位址 | 主機位址 | 用於 |
|---|---|---|---|
| Shared Network | 192.168.64.x | 192.168.64.1 | x86 方案 |
| Emulated VLAN | 10.0.2.15 | 10.0.2.2 | arm64 方案 |
客體內勿用 127.0.0.1 連主機,那是 Android 自己。
方法 A:macOS SMB(建議,可讀可寫)
主機端:系統設定 → 一般 → 共享 → 開啟「檔案共享」,按 + 加入資料夾並設「讀取與寫入」,選項確認 SMB 已啟用(macOS 的 SMB 服務即 smbd,開了檔案共享才會聽 445 port)。
Android 端:從 Play Store 裝支援 SMB 的檔案管理器(Material Files、CX 檔案總管等),新增 SMB 位置:
- Shared:
smb://192.168.64.1/<共享名稱> - Emulated:
smb://10.0.2.2/<共享名稱>
選「帳號密碼」登入(不要 Guest),帳號為 macOS 使用者名稱;App 強制要 Domain 可試 WORKGROUP。
主機端檢查:nc -z -v <主機位址> 445。
方法 B:主機 HTTP(唯讀,最快)
cd <共享資料夾>
python3 -m http.server 8000
Android 瀏覽器開 http://<主機位址>:8000/ 下載。打得開就代表主機位址正確、連線正常。
方法 C:ADB 傳檔
前置:VM 執行中,且客體 adbd 有跑(開機完成後才有)。
arm64(PixelOS):QEMU 已把客體 5555 轉發到主機,直接連本機:
adb connect 127.0.0.1:5555
adb devices
連線不需授權對話框(GRUB cmdline 帶 androidboot.insecure_adb=1)。
要能 adb shell,客體必須開啟「開發人員選項 → USB 偵錯」;未開啟時 adb devices 仍顯示 device,但 shell 會回 error: closed。
若顯示 offline,adb kill-server 後重連。
x86(BlissOS):預設沒開 ADB TCP,先在客體 root shell 啟用:
setprop service.adb.tcp.port 5555
stop adbd
start adbd
ip -4 addr show # 看客體 IP,例如 192.168.64.3
主機再連客體 IP(不是 127.0.0.1):
adb connect 192.168.64.3:5555
傳檔:
adb push /path/to/file /sdcard/Download/
adb pull /sdcard/Download/file .
遇到 remote fchown failed 先推暫存再複製:
adb push file.apk /data/local/tmp/file.apk
adb shell cp /data/local/tmp/file.apk /data/media/0/Download/file.apk
方法 D:UTM 內建共享(不適用)
UTM 4.7.5 只有 None / WebDAV(SPICE)/ VirtFS(9p),沒有 virtiofs——而 virtiofs 是 Android 客體唯一認得的半虛擬化檔案共享;LineageOS 客體 fstab 期待 type=virtiofs,開機噴:
[libfs_mgr] __mount(source=share,target=/mnt/vendor/shared,type=virtiofs)=-1: Invalid argument
掛不起來,一般 App 也讀不到 vendor 掛載點。請走方法 A 或 B。
注意
- App 看不到網路共享:Google Photos 這類 App 只掃 Android 自己的媒體庫(MediaStore),SMB/HTTP 共享資料夾不會出現在相簿或備份選項裡。要把本機照片上傳相簿,得用 ADB 推進內部儲存(見 05 無限空間 Google 相簿 的「把本機照片匯入並上傳」)。
- SMB/HTTP 只是網路共享,不會增加 Android「設定 → 儲存空間」的內部容量;真正提供持久化空間的是各方案自己的資料碟。
- 多數 App 不能直接讀網路路徑:先複製到 Download,或用系統檔案選擇器授權。
- SMB 需「檔案共享」保持開啟;
http.server關掉就沒了。