Android 如何永久性开启adb 的root权限

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 权限的判断逻辑。android

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

第一种方法. 修改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
  • 1
  • 2
  • 3

将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行:ui

ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
===> 
ifneq (,$(filter userdebug user eng,$(TARGET_BUILD_VARIANT)))
  • 1
  • 2
  • 3

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

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

[测试与确认]
  • 1

当修改完成后,只须要从新build bootimage ,而后download 便可,而后到setting 中开启debug 选项,adb 链接后,会显示 #, 即root 成功。 
若是贵司没有拿到adb 的source, 而贵司又须要本身修改adb 的话, 那么就麻烦贵司提交eService。由我司进一步协助贵司处理。code

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

相关文章
相关标签/搜索