【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;
}
相关推荐
lang2015092820 小时前
Java JSR 250核心注解全解析
java·开发语言
Wpa.wk20 小时前
接口自动化测试 - 请求构造和响应断言 -Rest-assure
开发语言·python·测试工具·接口自动化
czhc114007566320 小时前
协议 25
java·开发语言·算法
逆光的July20 小时前
如何解决超卖问题
java
ae_zr20 小时前
QT动态编译应用后,如何快速获取依赖
开发语言·qt
落花流水 丶20 小时前
Java 集合框架完全指南
java
gjxDaniel20 小时前
Kotlin编程语言入门与常见问题
android·开发语言·kotlin
csj5020 小时前
安卓基础之《(22)—高级控件(4)碎片Fragment》
android
lang2015092820 小时前
Java WebSocket API:JSR-356详解
java·python·websocket
jiang_changsheng20 小时前
环境管理工具全景图与深度对比
java·c语言·开发语言·c++·python·r语言