【Android】java中如何判断设备是否在root状态

前言

客户需求,需要判断设备是否执在root状态。可以理解为是否执行了adb root 设置root状态,已经adb unroot设置unroot状态。

代码分析

分析adb deamon发现:在执行adb root 、adb unroot指令时,系统会更新service.adb.root 变量。

bash 复制代码
void restart_root_service(unique_fd fd) {
    if (getuid() == 0) {
        WriteFdExactly(fd.get(), "adbd is already running as root\n");
        return;
    }
    if (!__android_log_is_debuggable()) {
        WriteFdExactly(fd.get(), "adbd cannot run as root in production builds\n");
        return;
    }

    LOG(INFO) << "adbd restarting as root";
    android::base::SetProperty("service.adb.root", "1");
    WriteFdExactly(fd.get(), "restarting adbd as root\n");
}

void restart_unroot_service(unique_fd fd) {
    if (getuid() != 0) {
        WriteFdExactly(fd.get(), "adbd not running as root\n");
        return;
    }

    LOG(INFO) << "adbd restarting as nonroot";
    android::base::SetProperty("service.adb.root", "0");
    WriteFdExactly(fd.get(), "restarting adbd as non root\n");
}

实现

系统应用可以通过SystemProperties get "service.adb.root" value来判断是否root。

bash 复制代码
public static final String ADB_ROOT_PROP = "service.adb.root";

public static boolean deviceIsRooted(){
return SystemProperties.getInt(ADB_ROOT_PROP,0) == 1 ? true:false;
}
相关推荐
程序员清风2 小时前
用了三年AI,我总结出高效使用AI的3个习惯!
java·后端·面试
beata3 小时前
Java基础-13: Java反射机制详解:原理、使用与实战示例
java·后端
用户0332126663673 小时前
Java 使用 Spire.Presentation 在 PowerPoint 中添加或删除表格行与列
java
奥陌陌4 小时前
android 打印函数调用堆栈
android
用户985120035834 小时前
Compose Navigation 3 深度解析(二):基础用法
android·android jetpack
恋猫de小郭4 小时前
Android 官方正式官宣 AI 支持 AppFunctions ,Android 官方 MCP 和系统级 OpenClaw 雏形
android·前端·flutter
黄林晴5 小时前
Android 17 Beta 2,隐私这把锁又拧紧了
android
Kapaseker5 小时前
研究表明,开发者对Kotlin集合的了解不到 20%
android·kotlin
bqliang5 小时前
Compose 媒体查询 (Media Query API) 🖱️👇🕹️
android·android jetpack
Seven975 小时前
Condition底层机制剖析:多线程等待与通知机制
java