人们想在线运行安卓应用,理由五花八门。Mac或iPhone用户要用一个只有安卓版的应用,用一个小时就行。审核人员收到一个APK,不想让它靠近自己的手机。开发者想在Android 12和Android 17上演示一个构建包,又不想带两台设备。产品经理想在一款办公室里没人有的机型上看看竞争对手的应用。
“免安装”的意思是,你的电脑和你自己的手机上什么都不会落下。应用当然还是要装在某个地方:装在一台运行在别处、把画面推流到你浏览器的手机上。本指南比较几种做法,并带你走一遍最快的那种。
四种方案对比
| 方案 | 准备时间 | 设备 | Android版本 | 最适合 | 局限 |
|---|---|---|---|---|---|
| 电脑上的模拟器 | 第一次20到60分钟,要下载好几GB | 通用设备配置 | 任意,每个版本一个镜像 | 已经在用Android Studio的开发者 | 需要性能不错的电脑;完全不在线 |
| 浏览器里的应用预览 | 几秒钟 | 通用配置 | 少数几个 | 演示你自己开发的应用 | 会话有限制,通常需要你自己上传的构建包 |
| 一台备用手机 | 有的话无需准备 | 一款机型 | 它装的那个版本 | 个人快速检查 | 只有一个版本,而且往往很旧 |
| 云手机 | 约一分钟 | 按真机型号打造 | 12到17 | 任何应用或APK,在浏览器里用 | 需要网络;免费时长用完后付费 |
自己电脑上的模拟器是开发者的经典答案,除了时间什么都不花。但它不适合非开发者,而且根本不在线。为应用演示而做的浏览器预览很快,但它们是给开发者展示自己构建包用的。备用手机能用,直到你需要第二个Android版本。
云手机介于这几者之间:一台运行在数据中心的完整安卓手机,把画面推流到你的浏览器,接收你的鼠标和键盘输入。它和模拟器的区别,更详细的介绍见在线安卓模拟器页面。
如何在云手机上运行应用
- 创建一台手机。注册,在12到17中选一个Android版本,再选一个国家。手机大约一分钟就绪,按150多款真机型号之一打造。
- 在浏览器里打开它的画面。点击就是触控,滚轮用来滚动,键盘直接打字。
- 安装应用。在控制台把APK文件拖到手机上,通过API上传,或者通过ADB中继运行
adb install app.apk。应用文档介绍了每一种方式。 - 使用应用。登录、走一遍流程、截图。
- 关机或重置手机。关机的手机不收费。重置会让它恢复到全新状态,应用和数据都会被清除。
在Clousd,前30分钟免费,无需绑卡,试一个应用通常足够了。之后按分钟计费,手机运行时每分钟$0.004,每台每天最多$0.80。
选哪个Android版本
大多数应用在任何当前版本上都能运行,但有两种情况需要有意识地选择。多年没更新的应用在最新的Android上可能出问题,新应用则可能拒绝安装在旧版本上。APK本身就会告诉你它的范围:
aapt2 dump badging app.apk | grep -E "sdkVersion|targetSdkVersion"
sdkVersion是应用接受的最低API级别,targetSdkVersion是它构建和测试时所针对的级别。对应的Android版本:API 31和32是Android 12,33是Android 13,34是Android 14,35是Android 15,36是Android 16,37是Android 17。
一个实用的默认选择,是最接近应用target的版本。如果你关心的是应用对普通用户的表现,而不是在最新版本上的表现,选范围中间的版本,比如14或15,是合理的。拿不准时,就创建两台手机对比:第二台也只要再等一分钟。
APK、XAPK和拆分APK
不是每个下载都是单个APK。以Bundle形式发布的应用,由一个基础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之前
在一台不属于你的手机上运行应用,本身就让它远离了你的文件、照片和账号。但还有几项检查值得做:
- 来源。优先选开发者自己的网站或应用商店。镜像站会重新打包文件。
- 哈希值。如果开发者公布了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列出应用申请的权限。一个手电筒应用要你的通讯录,它根本用不着。 - 账号。不要在你不信任的应用里登录你的主要账号。用这台手机看看它干了什么,然后重置。
给开发者:不发布也能展示构建包
云手机是把构建包摆到没有Android Studio的人面前的快捷方式。装上debug包,打开手机,在通话里带着审核人员走一遍。要检查版本差异,就创建两台手机,一台Android 12、一台Android 17,安装同一个APK对比。
日志通过同一个ADB连接获取:
adb logcat --pid=$(adb shell pidof -s com.example.app)
想要更完整的流程,包括在多个版本上跑测试、读取崩溃日志,见如何在线测试安卓应用。
本文不涵盖的内容
- iOS应用。这里只有安卓手机。
- 短信。手机收不到短信,所以注册时坚持要短信验证码的应用,在这里收不到验证码。
- 物理世界里的东西。对着你桌面的摄像头、一次非接触式刷卡,都不在一台运行于数据中心的手机能力范围内。


