adb 的root 权限是在system/core/adb/adb.c 中控制。主要根据ro.secure 以及 ro.debuggable 等system property 来控制。
默认即档ro.secure 为0 时,即开启root 权限,为1时再根据ro.debuggable 等选项来确认是否可以用开启root 权限。为此如果要永久性开启adb 的root 权限,有两种修改的方式:
1. 修改system property ro.secure, 让ro.secure=0。
2. 修改adb.c 中开启root 权限的判断逻辑。


下面详细说明这两种修改方式:

第一种方法. 修改system property ro.secure, 让ro.secure=0。
(1)修改alps/build/core/main.mk

ifneq (,$(user_variant))  # Target is secure in user builds.  ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1

将ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1
改成 ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0

(2) 在android JB 版本(4.1) 以后,google 从编译上直接去除了adbd 的user 版本root 权限, 为此您要修改system/core/adb/Android.mk
中的编译选项 ALLOW_ADBD_ROOT, 如果没有打开这个选项,那么adb.c 中将不会根据ro.secure 去选择root 还是shell 权限,直接返回shell 权限。
因此您必须需要Android.mk 中的第126行:

ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))===> ifneq (,$(filter userdebug user eng,$(TARGET_BUILD_VARIANT)))

第二种方法. 修改adb.c 中开启root 权限的判断逻辑。这里针对4.1 以后版本 和4.1以前版本有所区别。

如果是JB 4.1 以后版本,直接修改函数 should_drop_privileges() 函数, 清空这个函数,直接返回 0 即可。返回0 即开启root 权限。

[测试与确认]

当修改完成后,只需要重新build bootimage ,然后download 即可,然后到setting 中开启debug 选项,adb 连接后,会显示 #, 即root 成功。
如果贵司没有拿到adb 的source, 而贵司又需要自己修改adb 的话, 那么就麻烦贵司提交eService。由我司进一步协助贵司处理。

[相关FAQ]
JB 版本后user build + eng bootimage 无法开机
如何打开user debug选项
JB 4.2 user 版本的开发选项不见了,如何打开adb debug

更多相关文章

  1. android wifi热点默认网关
  2. android中的配置权限
  3. 开启Android(安卓)Q DarkMode | 开启Android(安卓)Q深色模式 夜
  4. Android(安卓)5.0 开机横屏修改方法
  5. Android5.1.1源码 - zygote fork出的子进程如何权限降级
  6. android 简单实现指纹识别功能
  7. Android(安卓)为点击事件添加震动效果
  8. Android(安卓)M 动态权限获取
  9. android 判断摄像头是否可用(6.0以下 )

随机推荐

  1. mysql 8.0.13 解压版安装配置方法图文教
  2. CentOS7.3下mysql 8.0.13安装配置方法图
  3. windows 64位下mysql 8.0.13 安装配置方
  4. mysql8.0.12如何重置root密码
  5. Mysql如何查询某条记录在分页的第几页详
  6. mysql8.0.11安装配置方法图文教程 MySQL8
  7. MYSQL5.7.24安装没有data目录和my-defaul
  8. mysql基础架构教程之查询语句执行的流程
  9. navicat连接mysql出现2059错误的解决方法
  10. MYSQL自定义函数判断是否正整数的实例代