Universal Installer 评测:一个能处理 split APK、静默安装和 VirusTotal 扫描的 Android 安装器
该项目围绕「A modern Android app for installing and managing APK packages with split APK support, silent install via Shizuku, and VirusTotal malware scanning.」构建,适用于实际场景的开源实践,提供可复用的工具链与集成方式。
秒懂
- 它是什么?
- Universal Installer 是一个开源的 Android 包管理器,支持 APKS、XAPK、APKM 等格式,整合 Shizuku 静默安装和 VirusTotal 扫描。本文基于仓库文档分析其工作机制、使用方式和适用边界。
- 适合谁用?
- Universal Installer 适合经常手动安装 APK 的进阶用户,尤其是需要处理 split APK 或 XAPK 包、希望在 TV 上安装应用、或者想要在安装前用 VirusTotal 检查文件的人。如果你只安装普通 APK 且系统自带安装器够用,那它带来的额外步骤和权限请求可能不值得。
- 能商用吗?
- 可以,但有条件。GPL-3.0 是 copyleft 许可证:如果你分发包含它的软件,就必须以同一许可证公开该软件的源代码。只在内部运行、不对外分发,则不会触发这项义务。
- 还在维护吗?
- 在维护。仓库最近一次提交在 5 天前。
- 用什么语言写的?
- 主要是 Kotlin(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。
开源项目深度解析
它解决什么问题
Android 系统自带的安装器只能处理单个 APK 文件。遇到 split APK(多个 .apk 分片)或者打包成 APKS、XAPK、APKM 格式的应用,默认安装器就无能为力了。Universal Installer 正是为这种场景设计的。它把这些不同格式的包统一处理,合并分片后安装,同时还能附带 OBB 文件。另一个痛点是在 Android 14 及以上版本,某些 APK 解析会报错,比如 README 里提到的 aconfig_flags.pb 错误。这个项目声称修复了这类解析问题,并且兼容到 Android 16,还预告支持 Android 17。此外,它面向的用户不只是普通手机用户,还包括 Android TV 用户,因为 TV 上安装第三方应用往往更麻烦。如果你经常从 GitHub 或第三方渠道下载 APK,或者需要批量管理应用,这个工具能省去不少手动操作。
工作机制:从选文件到安装完成的流程
根据 README 的描述,安装流程大致是:用户通过三种方式选择包,自动扫描存储、浏览 APK 相关文件、或者浏览所有文件。选定后,应用会解析包信息,在底部弹窗显示应用名、图标、版本、包名、大小、最低和目标 SDK、支持的 ABI、语言、权限、OBB 数量、分片数量。用户确认后,它调用 Ackpine 库执行安装。Ackpine 是一个支持 split APK 和 Shizuku 的安装库,是核心依赖。如果包内包含 OBB 文件,安装完成后会复制到 Android/obb/<package>/ 目录。复制过程在 WorkManager 的前台 worker 中运行,即使应用被关闭,任务也会继续,并在通知栏显示进度。OBB 写入有三种策略,按顺序尝试:直接 I/O 适用于 Android 11 之前;Shizuku 通过 shell UID 写入;最后是 SAF 树授权,用户需要授予对特定包 OBB 目录的访问权限,之后会记住这个授权。整个流程中,VirusTotal 集成是可选的,用户可以在安装前看到引擎计数。
安装和配置:真实命令与设置项
获取 Universal Installer 的方式有几种:Google Play、F-Droid、IzzyOnDroid 或 GitHub Releases。没有命令行安装过程,因为它是 Android 应用。安装后,基础功能可以直接使用,不需要 root 或 Shizuku。要启用静默安装和高级选项,需要先配置 Shizuku 服务,这通常通过 ADB 命令启动,例如 adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh,但 README 没有给出具体命令,只提到需要 Shizuku 支持。在应用内,安装器配置文件允许保存自定义安装选项,比如伪装安装来源(Google Play、Aurora、F-Droid 等预设),以及切换安装标志,如允许降级、授予所有权限、允许测试包、绕过低目标 SDK 阻止、为所有用户安装。这些设置存储在配置文件中,可以按应用或全局应用。远程下载功能可以粘贴 URL,文件保存到 /sdcard/Download/UniversalInstaller/ 目录,并保留 Content-Disposition 文件名。
Shizuku 与静默安装:真正的权力功能
Shizuku 是让普通应用获得 ADB 或 root 权限的机制。Universal Installer 在 Shizuku 或 root 可用时解锁一组功能,包括静默安装和卸载,不需要系统确认弹窗。这对手动安装多个应用或自动化流程很有价值。同时,它允许设置安装来源,伪装成 Play Store 或 F-Droid,以绕过某些应用对安装来源的检查。这是双刃剑:方便,但也可能被滥用。另一个功能是安装器配置文件,可以保存不同场景下的安装参数,比如针对某个应用预设为所有用户安装。需要注意的是,这些功能完全依赖 Shizuku 服务是否在运行。如果设备没有 root,且没有通过 ADB 启动 Shizuku,那么静默安装和高级选项根本不会出现。README 没有说明 Shizuku 连接失败时的降级行为,但逻辑上应该会回退到普通安装。对于不想折腾 ADB 的用户,这部分功能形同虚设。
VirusTotal 集成:扫描的边界
每次选择文件时,应用会自动计算 SHA-256 哈希并查询 VirusTotal。如果 VirusTotal 不认识这个文件,它可以选择上传文件进行完整的多引擎扫描,支持最大 650 MB 的文件。这听起来很安全,但有几个限制。首先,上传文件意味着将 APK 发送到第三方服务,对于包含敏感数据的内部应用,这可能不是好主意。其次,扫描结果以引擎计数显示,恶意、可疑、无害、未检测,这只是一个参考,不是最终裁决。VirusTotal 的检测率取决于参与引擎的数量,某些小众应用可能被误报。另外,README 没有说明扫描是否强制,也没有说明如果网络不可用会怎样。对于离线环境,这个功能就是摆设。对于需要快速判断一个 APK 是否可信的用户,这个集成提供了便利,但不应作为唯一的安全依据。
OBB 处理:一个被忽视的痛点
很多大型游戏和应用使用 OBB 文件来存储资源,但系统安装器不会处理它们。Universal Installer 在安装 XAPK、APKM 或 APKS 时,会自动检测包内的 .obb 文件并复制到正确位置。它还支持单独附加 OBB 文件,用户可以选择基础 APK 然后附加一个或多个 OBB。复制过程在前台 worker 中运行,即使用户离开应用也会继续。三种写入策略的降级顺序很实际:直接 I/O 在旧设备上可用,Shizuku 在 shell 权限下可以写入任意应用的 OBB 目录,SAF 授权则需要用户手动授予一次,之后会记住。这个设计考虑了不同 Android 版本的存储限制。但有一个问题:SAF 授权需要用户手动浏览到 Android/obb/<package>/ 目录,这对不熟悉文件系统的用户来说很麻烦。而且,如果设备不支持 Shizuku 且用户拒绝 SAF 授权,OBB 复制就会失败。README 没有说明失败时的错误提示是否友好,但可以推测这会是使用中的一个摩擦点。
局域网共享与 TV 支持:实用但有限
内置 HTTP 服务器允许在同一 Wi-Fi 网络下通过浏览器访问手机上的 APK 文件。这个功能适合在电脑上下载 APK 然后传到手机,或者反过来。它还有一个 web 仪表盘,可以上传新包到手机。发送到 TV 的功能通过扫描二维码实现,可以直接在 Android TV 上安装。PIN 码保护可以设置 4 到 8 位数字,防止局域网内其他人访问。这个功能很实用,但有一些限制。HTTP 服务器没有加密,所以 PIN 码在传输过程中是明文,虽然只是本地网络,但公共 Wi-Fi 下仍有风险。另外,服务器只在应用运行时可用,如果应用被杀死,共享就中断。README 没有说明服务器是否支持断点续传,对于大文件传输这可能是个问题。对于经常在多个设备之间传输 APK 的用户,这个功能比 USB 线方便,但不要指望它替代完整的文件同步方案。
替代方案与维护成本
类似的工具包括 InstallerX-Revived,README 提到 UI 动画灵感来自它。InstallerX 也支持 split APK 和 Shizuku,但 Universal Installer 增加了 VirusTotal 扫描、OBB 管理和局域网共享,功能更全。另一个替代是使用 ADB 命令行,例如 adb install-multiple base.apk split1.apk split2.apk,这不需要第三方应用,但需要电脑和 USB 调试,对普通用户不友好。维护方面,项目使用 GPL-3.0 许可,意味着任何衍生作品必须开源。项目更新频率较高,v1.10.0 在 2026-08-29 发布,v1.9.12 在 2026-08-09,v1.9.11 在 2026-07-02,大约每月一个版本。这保证了 bug 修复及时,但也意味着升级成本。用户需要关注新版本是否引入行为变化,比如 Shizuku 插件更新或 OBB 策略调整。由于依赖 Ackpine 和 Shizuku 库,这些库的更新也可能间接影响应用稳定性。
编辑结论
Universal Installer 适合经常手动安装 APK 的进阶用户,尤其是需要处理 split APK 或 XAPK 包、希望在 TV 上安装应用、或者想要在安装前用 VirusTotal 检查文件的人。如果你只安装普通 APK 且系统自带安装器够用,那它带来的额外步骤和权限请求可能不值得。如果你依赖 Shizuku 静默安装,先确认你的设备已经配置好 Shizuku 服务,因为该功能完全依赖它。同时,VirusTotal 上传功能会把文件发送到第三方服务,对隐私敏感的用户应在使用前阅读其隐私政策。此外,项目采用 GPL-3.0 许可,如果你计划修改代码或集成到商业产品,需注意许可证的传染性条款。最后,由于项目更新频繁(v1.10.0 于 2026-08-29 发布),建议在采用前检查最新版本是否修复了你关心的解析错误或 OBB 写入问题。
社区笔记