JJJ:linux下解压缩-分散压缩文件

对于要把同一批的若干个分散压缩文件1.tgz00、1.tgz01、1.tgz02解压到一起去,可以
cat 1.tgz* > 1.tgz,然后tar –vxzf 1.tgz

W java.io.IOException: Cannot run program "su": error=13, Permission denied 2025-06-25 16:27:24.540 4575-4575 System.err com.acme.player W at java.lang.ProcessBuilder.start(ProcessBuilder.java:1050) 2025-06-25 16:27:24.540 4575-4575 System.err com.acme.player W at java.lang.Runtime.exec(Runtime.java:694) 2025-06-25 16:27:24.541 4575-4575 System.err com.acme.player W at java.lang.Runtime.exec(Runtime.java:524) 2025-06-25 16:27:24.541 4575-4575 System.err com.acme.player W at com.blankj.utilcode.util.ShellUtils.execCmd(ShellUtils.java:296) 2025-06-25 16:27:24.541 4575-4575 System.err com.acme.player W at com.blankj.utilcode.util.ShellUtils.execCmd(ShellUtils.java:265) 2025-06-25 16:27:24.541 4575-4575 System.err com.acme.player W at com.blankj.utilcode.util.ShellUtils.execCmd(ShellUtils.java:133) 2025-06-25 16:27:24.541 4575-4575 System.err com.acme.player W at com.acme.player.HomeActivity.isDeviceAuthorized(HomeActivity.kt:505) 2025-06-25 16:27:24.541 4575-4575 System.err com.acme.player W at com.acme.player.HomeActivity.access$isDeviceAuthorized(HomeActivity.kt:36) 2025-06-25 16:27:24.541 4575-4575 System.err com.acme.player W at com.acme.player.HomeActivity$handleUdpCommand$1$1.invokeSuspend$lambda$0(HomeActivity.kt:441) 2025-06-25 16:27:24.541 4575-4575 System.err com.acme.player W at com.acme.player.HomeActivity$handleUdpCommand$1$1.$r8$lambda$4ZnYp24c8_g-Jjj8H8OShefIa2s(Unknown Source:0) 2025-06-25 16:27:24.542 4575-4575 System.err com.acme.player W at com.acme.player.HomeActivity$handleUdpCommand$1$1$$ExternalSyntheticLambda0.run(Unknown Source:2) 2025-06-25 16:27:24.542 4575-4575 System.err com.acme.player W at android.os.Handler.handleCallback(Handler.java:938) 2025-06-25 16:27:24.542 4575-4575 System.err com.acme.player W at android.os.Handler.dispatchMessage(Handler.java:99) 2025-06-25 16:27:24.542 4575-4575 System.err com.acme.player W at android.os.Looper.loopOnce(Looper.java:201) 2025-06-25 16:27:24.542 4575-4575 System.err com.acme.player W at android.os.Looper.loop(Looper.java:288) 2025-06-25 16:27:24.542 4575-4575 System.err com.acme.player W at android.app.ActivityThread.main(ActivityThread.java:7870) 2025-06-25 16:27:24.543 4575-4575 System.err com.acme.player W at java.lang.reflect.Method.invoke(Native Method) 2025-06-25 16:27:24.544 4575-4575 System.err com.acme.player W at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 2025-06-25 16:27:24.544 4575-4575 System.err com.acme.player W at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 2025-06-25 16:27:24.545 4575-4575 System.err com.acme.player W Caused by: java.io.IOException: error=13, Permission denied 2025-06-25 16:27:24.545 4575-4575 System.err com.acme.player W at java.lang.UNIXProcess.forkAndExec(Native Method) 2025-06-25 16:27:24.545 4575-4575 System.err com.acme.player W at java.lang.UNIXProcess.<init>(UNIXProcess.java:133) 2025-06-25 16:27:24.545 4575-4575 System.err com.acme.player W at java.lang.ProcessImpl.start(ProcessImpl.java:141) 2025-06-25 16:27:24.545 4575-4575 System.err com.acme.player W at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) 2025-06-25 16:27:24.545 4575-4575 System.err com.acme.player W ... 18 more 出现这个报错后导致系统奔溃了
06-26
在 Android 系统中,当调用 `Runtime.getRuntime().exec("su")` 时出现 `java.io.IOException: Cannot run program "su": error=13, Permission denied` 错误,通常是由于设备未正确授予应用 root 权限或系统限制了 root 访问权限所致。以下是一些可行的解决方案: ### 检查设备是否具备 root 权限 - 如果设备未 root,则无法执行 `su` 命令。应首先确认设备是否已成功 root,并使用如 [Root Checker](https://play.google.com/store/apps/details?id=com.koushikdutta.rootchecker) 类的应用验证。 - 在 Android 6.0(API 23)及以上版本中,即使设备已 root,某些 ROM 或安全策略可能限制第三方应用获取 root 权限[^3]。 ### 使用 Root 授权管理工具 - 安装并配置支持授权管理的 root 工具(如 Magisk、SuperSU)。确保应用在尝试执行 `su` 命令时被明确允许访问 root 权限。 - 可通过手动触发一次 root 请求,观察授权管理器是否弹出提示框,以确认配置是否生效[^4]。 ### 修改代码逻辑以增强兼容性 - 尝试使用更鲁棒的方式启动 root 进程。例如: ```java try { Process process = Runtime.getRuntime().exec("su"); DataOutputStream outputStream = new DataOutputStream(process.getOutputStream()); // 执行具体命令 outputStream.writeBytes("pm install -r /sdcard/QQ.apk\n"); outputStream.writeBytes("exit\n"); outputStream.flush(); process.waitFor(); } catch (Exception e) { e.printStackTrace(); } ``` 该方式显式关闭流并等待进程完成,有助于避免因资源释放不及时导致的问题[^4]。 ### 针对 Android 7.0 及以上版本的特殊处理 - 在 Android 7.0(API 24)及以上版本中,部分厂商和 ROM 实现了更严格的权限控制机制,传统的 `su` 调用方式可能不再适用。可考虑使用基于 Magisk 的模块化 root 解决方案,或使用适配高版本系统的 root 管理工具[^3]。 ### 替代方案:非 root 权限下实现功能 - 如果目标功能并非严格依赖 root 权限(如文件操作、安装 APK),可以改用标准 API 实现。例如,使用 `Intent` 启动安装流程: ```java Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File("/sdcard/QQ.apk")), "application/vnd.android.package-archive"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); ``` 这种方式无需 root 权限,且适用于大多数 Android 设备[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值