首先声明是小白,只是记录一下遇到过的一些问题,欢迎指正。

是否能获取root权限由system/core/adb/daemon/main.cpp中的should_drop_privileges函数决定,在下面把源码贴出来了,当should_drop_privileges函数返回false时为root,返回true时是非root的,这主要由ro.debuggable和service.adb.root这两个属性决定,ro.secure这个属性感觉不重要,不知道有什么用,知道的大哥可以教教我, __android_log_is_debuggable这个函数(源码在下面)就是ro.debuggable这个属性相关的,当ro.debuggable和service.adb.root都为真的时候,drop为false,should_drop_privileges函数返回的也是false,就获取到root权限了。

should_drop_privileges函数

static bool should_drop_privileges() {bool ro_secure = android::base::GetBoolProperty("ro.secure", true);bool ro_debuggable = __android_log_is_debuggable();// Drop privileges if ro.secure is set...bool drop = ro_secure;// ... except "adb root" lets you keep privileges in a debuggable build.std::string prop = android::base::GetProperty("service.adb.root", "");bool adb_root = (prop == "1");bool adb_unroot = (prop == "0");                                                                                                                     if (ro_debuggable && adb_root) {drop = false;}   // ... and "adb unroot" lets you explicitly drop privileges.if (adb_unroot) {drop = true;}   return drop;}

__android_log_is_debuggable函数

int __android_log_is_debuggable() {static uint32_t serial;static struct cache_char tag_cache;static const char key[] = "ro.debuggable";int ret;if (tag_cache.c) { /* ro property does not change after set */ret = tag_cache.c == '1';} else if (lock()) {struct cache_char temp_cache = {{NULL, 0xFFFFFFFF}, '\0'};refresh_cache(&temp_cache, key);ret = temp_cache.c == '1';} else {int change_detected = check_cache(&tag_cache.cache);uint32_t current_serial = __system_property_area_serial();if (current_serial != serial) {change_detected = 1;}if (change_detected) {refresh_cache(&tag_cache, key);serial = current_serial;}ret = tag_cache.c == '1';unlock();}return ret;
}

然后就是service.adb.root在哪儿被设置,当我们执行adb root时,会调用system/core/adb/daemon/restart_service.cpp中的restart_root_service函数,源码在下面贴出来,首先它会判断当前的模式是不是root,如果是就直接返回了,然后再会判断ro.debuggable这个属性的值,如果是0,也返回了,如果不是,接着就会设置service.adb.root为"1",这也就和上面函数should_drop_privileges中的判断对应上了

restart_root_service函数

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");
}

高通平台user版本怎么root相关推荐

  1. 高通平台user版本debug

    一.user开启root 一些平台可以通过单刷eng版本的boot.imag来root user版本,如果无法通过单刷bootimage来root,可以通过修改代码,使默认开启root. 1.1 sy ...

  2. 高通平台(Qualcomm) Android 10 /11/12 user版本默认打开adb 调试小结

    1.流程 USB插入接收广播授权->建立adb连接服务->执行adb 命令 2.adb相关属性 ro.secure = 0 开启root权限 ro.adb.secure = 1 1开启ad ...

  3. 高通平台sensor学习

    刚入行驱动时最先接触调试的外设模块便是sensor,一直都是零零散散的记录,这次终于下定决心对自己所学做一个系统的总结. sensor作为一款常用的外设,虽不起眼但是很多功能确实离不开它.比如我们手机 ...

  4. 高通平台android开发总结 MSM平台上的AMSS

    http://blog.csdn.net/mirkerson/article/details/7691029 MSM平台上的AMSS REX启动分析--基于Qualcomm平台 1.高通平台andro ...

  5. 高通平台android开发总结

    http://www.cnblogs.com/yuzaipiaofei/archive/2012/07/24/4124179.html 1.高通平台android开发总结 1.1 搭建高通平台环境开发 ...

  6. 高通平台android 环境配置编译及开发经验总结

    完全转自:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...

  7. 高通平台android开发总结 .

    http://blog.csdn.net/mirkerson/article/details/7691029 http://blog.csdn.net/mirkerson/article/detail ...

  8. 高通平台android 环境配置编译及开发经验总结【转】

    1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流 ...

  9. android 高通平台有前途吗,华为鸿蒙计划要适配高通平台了,可以告别安卓搭载鸿蒙OS了?...

    鸿蒙走出这一步是可以想象到的,看来华为打造这个系统希望的结果是万物皆可盘呀,所以一开始就提出了开源,也就意味着这次是高通,下次就可以是联发科,甚至更多的手机品牌也完全就可以搭载!早期我们一直在说国产手 ...

最新文章

  1. 想要学习Python爬虫,看这几本书就够了
  2. 活学活用流行的JavaScript库——《JavaScript实战》
  3. 【LeetCode从零单排】No14.LongestCommonPrefix
  4. C++构造函数的分类及调用
  5. L1-005 考试座位号
  6. Centos下的apache2练习
  7. C#中的bitmap类和图像像素值获取方法
  8. OpenCV学习笔记(十八):凸包,最小包围区域算子:convexHull(),minAreaRect(),minEnclosingTriangle(),minEnclosingCircle()
  9. chrome github上不去 mac_码农大叔打赌,github上快速搜索优质开源项目,这些技能你不懂?...
  10. mysql延迟复制实现
  11. 最优化读书笔记R(一)
  12. Leetcode-Maximum Subarray
  13. 玻璃质感_photoshop绘制玻璃质感创意图标
  14. [递归][重心] Luogu P4886 快递员
  15. 若依如何调整首页左侧菜单栏宽度
  16. Could not set property ‘XXX‘ of ‘class com.entity.XXX‘
  17. 花狗C语言彩色贪吃蛇(完整代码)
  18. 工程造价能不能预防超预算
  19. Java实现邮箱发送(阿里云邮箱推送)
  20. dlp型3d打印机_DLP3D打印机的工作原理及优势

热门文章

  1. 将EMS单号的物流信息导出EXCLE表格的实例
  2. cellpadding_在CSS中设置cellpadding和cellspacing
  3. 链接neo4j图形数据库的图像化显示(基于d3.js/neovis.js/neod3.js)
  4. java线程看门狗,ARM之看门狗~! - junjun - JavaEye技术网站 - 小陈的日志 - 网易...
  5. 尺寸链计算-分析-软件-国产
  6. 华为云服务-微服务部署后的WEB服务日常如何运维
  7. word显示打印机服务器脱机,打印机显示脱机无法打印的原因分析和解决办法
  8. input框输数数字
  9. SoC-按键控制led
  10. mysql8.x实践系列(3)Qt客户端连接mysql报错:Authentication plugin ‘caching_sha2_password‘ reported error