从已安装的 Android 应用程序中提取 APK 文件
法律和安全注意事项: 本文仅用于教育目的。从设备中提取 APK 旨在用于应用程序 您已经合法安装在您拥有的设备上 的个人备份。 XAPK 至 APK 不会托管、分发、链接或协助访问受版权保护、付费或盗版的应用程序。 不允许重新分发付费或受版权保护的应用程序的提取 APK。请参阅我们的 免责声明 了解完整条款。
您的手机上有一个很棒的应用程序,您花了几个小时来设置,却发现它已从 Play 商店中删除。或者,您可能正在切换到新设备,并且想要一份您最喜欢的工具的离线副本,以防万一。当前安装的应用程序中的 提取APK文件 就是解决方案。
下面我们将介绍如何在没有 root 的情况下从手机上提取 APK,这对于备份非常方便,以及如何使用我们的 在线分析工具 检查提取的文件。
要点
- 您可以直接从设备的内部存储中提取几乎所有应用程序的 APK 文件。
- 现代应用程序经常使用 拆分 APK,这需要专门的提取器。
- 根(超级用户)访问权限通常为 不需要 以备份标准应用程序。
- 解压后,您可以将文件传输到 SD 卡、PC 或云存储。
为什么提取 APK?
在开始讨论“如何做”之前,以下是您应该维护 APK 备份库的原因:
- 保留已停止使用的应用程序: 如果开发人员从商店中删除他们的应用程序,您仍然拥有可安装的副本。
- 旧版硬件支持: 当官方应用程序更新为需要更新的 Android 版本时,保留可在旧平板电脑上运行的版本。
- 版本回滚: 如果更新引入了错误,您可以重新安装提取的备份并恢复正常工作。
- 应用程序共享: 通过蓝牙或电缆向朋友发送特定的应用程序版本,无需使用蜂窝数据。
方法1:使用APK提取应用程序(无需Root)
最简单的方法是使用专用实用程序。 Play 商店中有数十种“APK Extractor”应用程序。这些工具的工作原理是在 /data/app/(可读但通常隐藏)中查找应用程序的安装路径,并将 base.apk 复制到您的公共下载文件夹。
步骤:
- 安装信誉良好的 APK 提取器。
- 打开应用程序并根据要求授予“存储权限”。
- 滚动浏览所有已安装应用程序的列表。
- 点击您要保存的应用程序。
- 该工具会立即将 APK 复制到您的内部存储。
处理拆分 APK
如果您提取 Facebook 或 WhatsApp 等复杂应用程序,您可能会发现多个 .apk 文件,而不是一个。这些是 拆分 APK。要使用它们,您需要我们的 APKS/APKM 合并工具 将它们合并到一个文件中。
方法2:通过ADB手动提取(高级)
如果您不想在手机上安装额外的应用程序,您可以使用带有 Android 调试桥 (ADB) 的 PC:
- 通过 USB 将手机连接到 PC 并启用 USB 调试。
- 打开终端并输入:adb shell pm path com.example.app
- 这将显示路径。示例:package:/data/app/com.example.app/base.apk
- 型号:adb pull /data/app/com.example.app/base.apk ./backup.apk
- 该文件现在位于您的电脑上!
提取时实际得到什么
“已安装”的 Android 应用程序不再作为单个 APK 存储在设备上,尤其是当它作为 Android 应用程序包来自 Play 商店时。解压时,您可能会得到一个或多个文件,了解差异可以帮助您决定保留哪些文件:
- 单一基础 APK。 作为普通 APK 上传到 Play 的较旧或较小的应用程序仍作为单个文件安装。提取返回一个独立的 .apk。
- 以 AAB 形式发布的 基本 APK + 几个配置拆分。 应用程序会作为多个 APK 并排安装:base.apk 加 split_config.<abi>.apk(CPU 的本机代码)、split_config.<density>.apk(屏幕的资源)和 split_config.<language>.apk(区域设置的字符串)。提取会返回所有这些内容。要在同一设备上重新安装同一应用程序,您需要全部这些。
- 有时是资产包数据。 使用 Play Asset Delivery 的现代游戏将大型游戏资产存储在 APK 本身外部的应用程序私有缓存中。这些通常无法使用常规提取器导出;资源包设计为在首次启动时重新获取。
如果您的目标是要安装在另一台设备上的便携式备份,您通常需要 (a) 使用我们的 APKS 到 APK 合并 生成的合并的“通用 APK”,或 (b) 将所有拆分存档在一起,以便 SAI 等拆分 APK 安装程序可以将它们恢复为一个单元。
提取是如何工作的(无根,幕后)
大多数“APK 提取器”应用程序实际上不需要 root,因为 Android 通过系统级读取路径公开已安装的包文件。标准流程为:
- 提取器应用程序调用 PackageManager.getPackageInfo(package, ...) 来获取已安装应用程序的列表。
- 对于所选应用程序,它读取 ApplicationInfo.sourceDir(基本 APK 的路径,通常为 /data/app/<package>-<hash>/base.apk)和 splitSourceDirs(任何配置拆分的路径)。
- 用户安装的提取器无法直接读取这些路径,但Android中的FileProvider机制允许系统组件授予对特定URI的临时读取访问权限。 OS 做允许任何应用程序通过URI打开其自己的 APK和其他应用程序的APK;这是故意的,因为安装路径对于卸载和更新等任务始终是世界可读的。
- 提取器将字节复制到可写用户目录(下载、应用内缓存文件夹或外部存储),并将它们作为文件呈现以共享或安装。
仅根方法 (su; cp /data/app/...) 绕过 API 并直接读取原始路径。它们并不更快,对于非系统应用程序来说也不是必需的。
通过 ADB 提取(推荐用于备份)
最干净的非应用程序工作流程是 ADB,大多数开发人员已经设置了它。两个命令完成整个工作:
# 1. Find the on-device path(s) for the package
adb shell pm path com.example.app
# Output (single APK):
# package:/data/app/~~hash==/com.example.app-1/base.apk
#
# Output (split APKs):
# package:/data/app/~~hash==/com.example.app-1/base.apk
# package:/data/app/~~hash==/com.example.app-1/split_config.arm64_v8a.apk
# package:/data/app/~~hash==/com.example.app-1/split_config.xxhdpi.apk
# package:/data/app/~~hash==/com.example.app-1/split_config.en.apk
# 2. Pull each path
adb pull /data/app/~~hash==/com.example.app-1/base.apk ./
对于拆分 APK 应用程序,请对每个路径重复 adb pull。要获得单个可安装文件,请将它们全部放到我们的 APKS 到 APK 合并 上。
无法提取的内容
提取将返回应用程序的安装文件。它返回 不是:
- 应用程序数据:首选项、数据库、保存文件。它们位于 /data/data/<package>/ 下,并受到用户数据沙箱的保护,免受非根提取。
- 玩资产交付资产包:首次运行时下载,私有缓存,如果丢失预计将重新获取。
- 云端保存进度:如果应用程序使用 Google Play Games、Firebase 或类似产品,则云存储部分位于发布商的服务器上,而不是您的设备上。
因此,提取对于“我想要保留安装程序的副本”用例很有用,但不能替代正确的全设备备份(需要根或供应商工具)。
常见问题 (FAQ)
提取应用程序是否包含我的登录数据?
不会。提取仅复制 应用程序代码和资源。出于安全原因,它不包括您的个人帐户数据、密码或设置。
我可以提取 YouTube 等系统应用程序吗?
是的。但是,某些系统应用程序可能对特定操作系统版本具有深度依赖性,并且可能无法在其他设备上正确安装。
提取的 APK 去哪里了?
大多数提取器应用程序将文件保存到手机内部存储中名为 提取的APK 或 下载 的文件夹中。
备份已安装的应用程序而不丢失拆分配置
构建您自己的本地应用程序存储库是永远不会失去对您喜爱的工具的访问的最可靠方法。轻触友好的应用程序和 ADB 终端都可以帮助您实现这一目标,无论哪种方式,提取APK文件 都是管理 Android 设备的安全、实用的方法。备份库后,请花一些时间查看这些备份,以便您知道它们随着时间的推移不会被篡改 (验证签名)。