Android P使用pm install安装apk报错

在 Android P 系统中,使用 pminstall 命令安装 APK 文件时出现权限错误,系统服务器无法访问 SD 卡上的文件。解决方法包括将文件移动到 /data/local/tmp/ 目录下再安装,或者使用 cat 命令结合管道操作进行安装。此外,也可以尝试修改 SELinux 权限设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android P使用pm install安装apk报错

PX30_Android10:/sdcard # pm install SU70_1.apk
avc:  denied  { read } for  scontext=u:r:system_server:s0 tcontext=u:object_r:sdcardfs:s0 tclass=file permissive=0
System server has no access to read file context u:object_r:sdcardfs:s0 (from path /storage/emulated/0/SU70_1.apk, context u:r:system_server:s0)
Error: Unable to open file: SU70_1.apk
Consider using a file under /data/local/tmp/
Error: Can't open file: SU70_1.apk

Exception occurred while executing:
java.lang.IllegalArgumentException: Error: Can't open file: SU70_1.apk
        at com.android.server.pm.PackageManagerShellCommand.setParamsSize(PackageManagerShellCommand.java:461)
        at com.android.server.pm.PackageManagerShellCommand.runInstall(PackageManagerShellCommand.java:1060)
        at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:169)
        at android.os.ShellCommand.exec(ShellCommand.java:104)
        at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:22086)
        at android.os.Binder.shellCommand(Binder.java:881)
        at android.os.Binder.onTransact(Binder.java:765)
        at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:4952)
        at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4086)
        at android.os.Binder.execTransactInternal(Binder.java:1021)
        at android.os.Binder.execTransact(Binder.java:994)

解决方法

在android P以前可以使用pm install安装apk,但是在android P出现报以上错误,有以下两种解决方法

1.将文件拷贝到/data/local/tmp/下再进行安装

String path =/data/local/tmp/;
String fileName = PathData.utfApkName;
File apkFile = new File(path + fileName);
String command = "pm install " + apkFile.getAbsolutePath();

2.使用cat $apkfile.apk | pm install -S $apkfile.length

String installCommand = " cat " + apkFile.getAbsolutePath() + " | pm install -S "+ apkLength;

3.根据提示修改selinux权限:

avc:  denied  { read } for  scontext=u:r:system_server:s0 tcontext=u:object_r:sdcardfs:s0 tclass=file permissive=0
System server has no access to read file context u:object_r:sdcardfs:s0 (from path /storage/emulated/0/SU70_1.apk, context u:r:system_server:s0)

转载:https://blog.csdn.net/xuebijun/article/details/82852414

### 安卓环境中 `pm install` 的报错解决方案 当尝试在 Android 环境下通过 `adb shell pm install` 命令安装 APK 文件时,可能会遇到各种错误。以下是可能导致问题的原因以及对应的解决方法: #### 1. 权限不足 如果运行 `pm install` 出现权限拒绝的错误,则可能是因为当前 Shell 用户不具备足够的权限来执行该操作。 - **解决办法**: 切换到 root 用户再执行命令。 ```bash adb root adb shell su -c 'pm install /path/to/your/app.apk' ``` 此命令会切换至超级用户模式并重新尝试安装[^1]。 --- #### 2. APK 路径不正确 确保指定的 APK 文件路径是设备内部存储中的有效路径。如果直接传递本地计算机上的路径(如 Windows 上的 `C:\...`),则不会被识别。 - **解决办法**: 将 APK 推送到设备后再进行安装。 ```bash adb push C:\Users\31210\Downloads\XXX.apk /data/local/tmp/ adb shell pm install /data/local/tmp/XXX.apk ``` 上述命令先将 APK 文件上传到目标设备上 `/data/local/tmp/` 目录,然后再调用 `pm install` 进行安装。 --- #### 3. 设备未启用未知来源应用安装 某些情况下,即使拥有管理员权限,也可能因为系统安全设置而阻止来自非官方渠道的应用程序安装。 - **解决办法**: 启用允许安装未知来源应用程序的功能。 进入手机设置 -> 安全性 -> 打开“未知来源”选项。或者针对特定包名授权: ```bash adb shell settings put global package_verifier_enable 0 ``` 这一步关闭了 Google Play Protect 对第三方应用的安全扫描功能。 --- #### 4. 存储空间不足 如果目标设备可用磁盘容量不足以容纳新安装的应用数据,也会引发失败提示。 - **解决办法**: 清理部分缓存或卸载不必要的软件释放更多空间之后重试。 --- #### 5. 应用签名冲突 对于已经存在同名称但不同版本号或者不同的密钥签署过的实例来说,再次部署将会触发异常。 - **解决办法**: 卸载旧版后再继续新的流程。 ```bash adb uninstall com.example.yourapp.package adb shell pm install /data/local/tmp/XXX.apk ``` 这里假设替换掉实际项目的包名为 `com.example.yourapp.package`。 --- #### 注意事项 尽管提供了多种修复策略,但在具体实施前仍需确认确切的错误消息内容以便采取最合适的措施处理它。另外值得注意的是,在生产环境里随意修改安全性参数可能存在风险,请谨慎行事!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值