想在線上執行 Android App 的理由,差異很大。Mac 或 iPhone 使用者需要用一個只有 Android 版的 App,用一個小時就好。審查者收到一個 APK,完全不想讓它靠近自己的手機。開發者想在 Android 12 和 Android 17 上展示同一個建置版本,又不想帶兩台裝置。產品經理想在辦公室裡沒人有的機型上,看看競爭對手的 App。
「免安裝」的意思是,什麼都不會落在你的電腦或你自己的手機上。App 還是會被安裝在某個地方:一台在別處執行、把畫面串流到你瀏覽器的手機上。這篇指南比較幾種做法,並一步步帶你走過最快的那一種。
四種做法比較
| 做法 | 設定時間 | 裝置 | Android 版本 | 最適合 | 限制 |
|---|---|---|---|---|---|
| 電腦上的模擬器 | 第一次 20-60 分鐘,要下載好幾 GB | 通用的裝置設定 | 任何版本,每個版本一個映像檔 | 本來就在用 Android Studio 的開發者 | 需要效能夠的電腦;完全不是線上的 |
| 瀏覽器裡的 App 預覽 | 幾秒鐘 | 通用 | 少數幾個 | 簡短展示你自己做的 App | 有工作階段限制,通常要上傳自己的建置版本 |
| 一支備用手機 | 有的話就不用設定 | 單一機型 | 它裝的那一版 | 快速的個人檢查 | 只有一個版本,而且常常過時 |
| 雲手機 | 約一分鐘 | 以真實手機型號打造 | 12 到 17 | 任何 App 或 APK,從瀏覽器操作 | 需要網路連線;免費分鐘用完後要付費 |
在自己電腦上跑模擬器,是開發者的標準答案,除了時間之外不用花錢。但對不是開發者的人來說並不適合,而且它根本不是線上的。為 App 展示打造的瀏覽器預覽很快,但它們是給開發者展示自己建置版本用的。備用手機堪用,直到你需要第二個 Android 版本為止。
雲手機介於這些之間:一支在資料中心執行的完整 Android 手機,把畫面串流到你的瀏覽器,並接收你的滑鼠和鍵盤輸入。它和模擬器的詳細差別,請看線上 Android 模擬器頁面。
怎麼在雲手機上執行 App
- 建立手機。 註冊後,從 12 到 17 選一個 Android 版本,再選一個國家。手機大約一分鐘就緒,以 150 多款真實手機型號之一打造。
- 在瀏覽器打開它的畫面。 點擊就是觸控,滾輪就是捲動,鍵盤就是輸入。
- 安裝 App。 在控制台把 APK 檔拖到手機上、透過 API 上傳,或透過 ADB 中繼執行
adb install app.apk。App 文件說明了每一種方式。 - 使用 App。 登入、試試各個流程、截圖。
- 關機或重置手機。 關機的手機不收費。重置會讓它回到全新狀態,App 和資料都會被移除。
在 Clousd 上,前 30 分鐘免費,不需信用卡,通常足夠試用一個 App。之後按分鐘計費,手機開機時每分鐘 $0.004,每台每天最多 $0.80。
該選哪個 Android 版本
大多數 App 在任何目前的版本上都能跑,但有兩種情況需要刻意選擇。好幾年沒更新的 App 在最新的 Android 上可能會出問題,而新的 App 可能拒絕安裝在較舊的版本上。APK 本身會告訴你它的範圍:
aapt2 dump badging app.apk | grep -E "sdkVersion|targetSdkVersion"
sdkVersion 是 App 接受的最低 API 等級,targetSdkVersion 則是它建置與測試時鎖定的版本。對應的 Android 版本是:API 31 和 32 是 Android 12,33 是 Android 13,34 是 Android 14,35 是 Android 15,36 是 Android 16,37 是 Android 17。
實用的預設選擇,是最接近 App 目標版本的那一版。如果你想知道的是 App 對一般使用者的表現,而不是在最新版本上的表現,選一個範圍中間的版本,例如 14 或 15,是合理的做法。不確定的話,就建立兩台手機比較看看:第二台也只要再一分鐘。
APK、XAPK 與分割 APK
不是每個下載檔都是單一的 APK。以 bundle 形式發布的 App,會是一個基礎 APK,加上針對螢幕密度、語言和處理器的分割檔案。下載網站會把它們打包成 .xapk 或 .apks,其實就是 zip 壓縮檔。
- 一般的
.apk可以直接安裝。 - 如果是 bundle,先解壓縮,再把各部分一起安裝:
adb install-multiple base.apk split_config.arm64_v8a.apk split_config.en.apk split_config.xxhdpi.apk
- 如果 bundle 裡有好幾個處理器的分割檔,安裝符合手機的那一個。用
adb shell getprop ro.product.cpu.abi就能知道是哪一個。
錯誤訊息 INSTALL_FAILED_NO_MATCHING_ABIS 代表你安裝的檔案裡沒有給這支手機處理器用的程式碼,INSTALL_FAILED_MISSING_SPLIT 則代表 bundle 少了某個部分。
信任一個 APK 之前
在不是你自己的手機上執行 App,本來就讓它碰不到你的檔案、相片和帳號。不過,做幾項檢查還是值得的:
- 來源。 優先選擇開發者自己的網站或應用程式商店。鏡像站會重新打包檔案。
- 雜湊值。 如果開發者有公布 SHA-256,就比對一下:Linux 或 macOS 用
sha256sum app.apk,Windows 用certutil -hashfile app.apk SHA256。 - 簽章。 Android 建置工具裡的
apksigner verify --print-certs app.apk會顯示是誰簽署的。憑證和官方版本不同,就是警訊。 - 權限。
aapt2 dump permissions app.apk會列出 App 要求的權限。一個手電筒 App 要讀你的聯絡人,根本沒必要。 - 帳號。 不要在不信任的 App 裡登入你的主要帳號。用這支手機看看它會做什麼,然後重置。
給開發者:不用發布,也能展示建置版本
雲手機是把建置版本快速拿給沒有 Android Studio 的人看的好方法。安裝 debug 版本、打開手機,在通話中帶審查者一步步看。如果要檢查版本差異,就建立兩台手機,一台 Android 12、一台 Android 17,安裝同一個 APK 比較看看。
Log 也透過同一條 ADB 連線取得:
adb logcat --pid=$(adb shell pidof -s com.example.app)
更完整的工作流程,包括在多個版本上跑測試、讀當機 log,請看線上測試 Android App。
這篇沒有涵蓋的
- iOS App。 這些都只是 Android 手機。
- 簡訊。 手機收不到簡訊,所以註冊時堅持要簡訊驗證碼的 App,在這裡收不到。
- 實體世界的東西。 對著你桌面的相機、感應卡片的動作,都不是一支在資料中心執行的手機能做到的。


