如何从Android模拟器Work Profile提取APK?执行adb命令无结果
排查解决步骤
执行pm path无返回,核心原因无外乎用户ID错误、包名错误、权限不足、应用未安装到对应用户空间四类,按以下顺序逐一排查即可:
- 确认Work Profile真实用户ID,不要硬编码10
网上不少教程默认写--user 10,但这个ID不是固定值,不同模拟器、不同创建时机生成的Work Profile ID可能是11、13等其他数值。先执行以下命令查询设备全量用户列表:adb shell pm list users
找到输出中带Work profile标记的条目,大括号内紧跟的第一个数字就是Work Profile的真实用户ID,后续所有命令都替换成这个值。 - 核对包名准确性,确认应用已安装到对应Work Profile
Work Profile是完全独立的用户空间,主用户下安装的应用不会自动同步到工作空间。替换上一步拿到的真实用户ID,执行命令列出该用户下所有第三方应用:adb shell pm list packages --user <真实用户ID> -3
在输出里核对目标应用包名,包名完全区分大小写,测试版、渠道版、正式版的包名可能存在差异,不要凭记忆输入。如果列表里找不到对应包名,说明应用根本没装到这个工作空间下,需要先在工作空间内手动安装应用,或者执行adb shell pm install --user <真实用户ID> <本地APK存储路径>为工作用户部署应用后再继续。 - 提升adb权限绕过管控拦截
大部分Android模拟器支持adb root,先执行:adb root
等adbd以root模式重启后,再重新执行路径查询命令。非root状态下,部分带企业管控策略的Work Profile会隐藏应用安装路径,直接返回空结果。 - 用dumpsys兜底查询路径(适配Split APK场景)
pm path对拆分发布的Split APK兼容性较差,部分多拆分包应用会触发返回空的问题,可直接从包管理服务拉取全量信息:adb shell dumpsys package <目标应用完整包名> --user <真实用户ID>
在输出中查找codePath字段,对应的目录就是应用APK的实际存放位置,目录下包含base.apk以及所有split_*.apk拆分文件,提取时需要把该目录下所有apk文件全部pull到本地。
注意:提取Split APK格式应用时,不能只单独pull base.apk,否则安装后会出现闪退、功能缺失问题,回装时需要使用
adb install-multiple命令将所有拆分APK一并传入安装。
内容的提问来源于stack exchange,提问作者Lionel Torres
相关产品推荐
相关产品推荐

