【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;
}
相关推荐
Bigemap4 分钟前
BigemapPro快速添加历史影像(Arcgis卫星地图历史地图)
java·开发语言
IT学长编程8 分钟前
计算机毕业设计 基于Hadoop的健康饮食推荐系统的设计与实现 Java 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
java·大数据·hadoop·毕业设计·课程设计·推荐算法·毕业论文
hrrrrb16 分钟前
【Python】字符串
java·前端·python
进击的_鹏17 分钟前
【C++11】initializer_list列表初始化、右值引用和移动语义、可变参数模版等
开发语言·c++
mark-puls23 分钟前
C语言打印爱心
c语言·开发语言·算法
mkhase24 分钟前
9.12-QT-基本登陆界面实现
java·jvm·qt
PenguinLetsGo26 分钟前
你的App是否有出现过幽灵调用?
android
yinke小琪27 分钟前
说说hashCode() 和 equals() 之间的关系
java·后端·面试
若鱼191930 分钟前
Kafka如何配置生产者拦截器和消费者拦截器
java·kafka
西阳未落30 分钟前
C语言柔性数组详解与应用
c语言·开发语言·柔性数组