You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用root权限运行Kotlin代码?基于libsu库的技术问询

用libsu以root权限执行Kotlin文件操作的方案

问题本质

你当前的应用进程本身没有root权限,只有通过Shell.cmd()启动的子shell进程拥有root权限,所以直接调用File类的方法是在应用自身权限下执行,自然访问不了root保护的目录。

可行解决方案

1. 用libsu内置的RootFile替代标准File

libsu专门提供了RootFile类,所有文件操作都会通过root shell执行,API和标准File几乎完全一致,直接替换即可:

import com.topjohnwu.su.io.RootFile

val srcDir = "data/data"
val rootDir = RootFile(srcDir)
val dirChilds = rootDir.list() // 此操作以root权限运行

它支持list()、exists()、delete()、mkdirs()等所有常用文件操作,无需自己处理shell命令和结果解析。

2. 将文件操作转为shell命令执行

如果不想引入RootFile,可以把Kotlin的文件操作逻辑转换成对应的shell命令,通过Shell.cmd()执行后解析输出:

val srcDir = "data/data"
val execResult = Shell.cmd("ls '$srcDir'").exec()
if (execResult.isSuccess) {
    val dirChilds = execResult.out.filterNot { it.isBlank() }
    // 处理得到的目录列表
}

这种方式需要自己处理命令输出的格式,适合自定义逻辑较强的场景。

3. 全局提权(不推荐)

虽然可以通过fork root进程再重启应用的方式让整个进程获得root权限,但这种做法复杂度高、安全性差,还违背libsu的设计初衷,不建议使用。

注意点

  • 确保libsu初始化正确,且用户已授予root权限
  • 使用RootFile时要处理权限不足、操作失败等异常情况

内容的提问来源于stack exchange,提问作者Cyber Avater

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 10:02:24