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 权限的判断逻辑。
下面详细说明这两种修改方式:
第一种方法.
修改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怎么判断是否有root权限,并更改system/app内容
一、首先判断root权限:
adb root 结果: C:signapp adb root restarting adbd as root # 说明有root权限 ,若是adbd cannot run as root in production builds 则说明没有root权限
二、更改system/app内容
一般情况下system/app都会出现read only,所以需要adb remount(这是一个重新mount你的分区的命令,让system分区从只读变成可读可写,获得了root权限才可运行,先执行adb root)
在system/app中就可以随意修改了,但是注意一点,
若想预置为系统应用,则如果只是将apk拷贝到 /system/app目录下还是不够的,还需要 777 的权限,命令:chmod 777 target.apk
总的来说就下面几个代码:
adb root adb remount adb push target.apk /system/app adb shell cd ../system/app chomd 777 target.apk reboot
还有些地方可以通过如下命令操作:
$ adb push SecureSetting.apk /sdcard/ // 上传要安装的文件,为安装做准备。
$ adb shell $ su // 切换到 root 用户。如果没有获得 Root 权限,这一步不会成功。
# mount //显示当前mount情况
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system // 让分区可写。
# cat /sdcard/SecureSetting.apk /system/app/SecureSetting.apk // 这一步可以用 cp 实现,但一般设备中没有包含该命令。如果使用 mv 会出现错误:failed on '/sdcard/NetWork.apk' - Cross-device link。
chmod 777 chetou.apk
# mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system // 还原分区属性,只读。
# exit $ exit
以上这篇Android 实现永久性开启adb 的root权限就是小编分享给大家的全部内容了,希望能给大家一个参考。
- 一个完整的Django入门指南(三)
- 1.Django自学课堂 模板的使用
- 23.Django基础
- SpringBoot开发案例之整合Quartz注入Service
- 谈谈代码质量问题
- SpringCloud config配置文件加密
- SpringCloud服务比较快的下线配置
- 洛谷P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold
- 24.Django路由规则
- 洛谷P2852 [USACO06DEC]牛奶模式Milk Patterns
- 25.django Model
- 26.Django模板语言和分页
- 28.Django cookie
- 29.Django session
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 性能测试必备知识(4)- 使用 stress 和 sysstat 分析平均负载过高的场景
- 高并发利器-guava分流与缓存
- 树莓派3b+组装+烧录retropie系统
- 使用Azure DevOps Pipeline实现.Net Core程序的CI
- 带你遨游USB世界
- C# 泛型中的数据类型判定与转换
- 评测Loki日志工具
- .Net微服务实战之负载均衡(上)
- ES 7.8 速成笔记(上)
- 利用Xtrabackup进行mysql增量备份和全量备份
- ES 7.8 速成笔记(中)
- 什么?字符串为空?
- PowerBI DAX 计算组 基础篇
- 45. Vue路由vue-router的基本使用
- 博客园样式管理总结(个人博客园装修指南)