当前位置: 首页 > 编程笔记 >

Android 实现永久性开启adb 的root权限

姜运珧
2023-03-14
本文向大家介绍Android 实现永久性开启adb 的root权限,包括了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权限就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 我正在尝试从我的手机上检索我的文件,屏幕坏了。安装了adb,设备已经root。试图在adb shell上获得root访问权限,但它不起作用,无法列出 /data/.中的文件夹。 这是命令提示符 抄送: 据我所知,$ 符号应该变成#符号,表示我有root访问权限,但它不起作用,任何修复?谢谢

  • 我有一个应用程序,可以管理设备的wifi和蓝牙状态。为此,它接收到一条带有状态的消息,并且该状态是否应该被强制。然后应用状态并保存两个值。 例如:我发送消息禁用wifi并强制使用。然后我关闭无线网络,拯救国家,这是被迫的。此外,我有一个BroadcastRecector,监听无线网络状态的变化,如果收到,它首先检查是否启用了无线网络,如果这是好的。这就像一个魅力:公共类无线状态接收器扩展了广播接收

  • 5xx永久性否定 永久性否定的完成答复,该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。 500语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。 501在参数中有语法错误。 502未执行命令。 503错误的命令序列。 504未执行该参数的命令。 530未登录。 532存储文件需要帐户。 550未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。 55

  • 问题内容: Android 8的电池消耗改进对用户来说不错,但是我担心我的服务是否能按预期工作。 首先:谢谢您的任何建议,但我不能只安排服务时间。我想让一个-like关键字监听器一直在后台运行。它将基于开源的Pocketsphinx-android库。我知道这会消耗大量电池电量,因此我会通知用户。 我们可以在android 8+上创建永久的后台服务吗?我需要在gradle中定位android 8,

  • [https://developer.android.com/about/versions/oreo/background.html]-真的没有办法为我的用例(但最好是为所有用例)提供永久的后台服务吗?

  • 我把我解锁的Galaxy S3(SGH-T999) 现在,我试图从Windows命令提示符运行,但是,我得到了错误。所以,我首先检查的是我的手机是否真的有根? 于是我尝试了以下几点: 打开命令提示符 null