方法1:
android的编译时有TARGET_BUILD_VARIANT值有几种不同的形式,如果TARGET_BUILD_VARIANT的值为eng时,adb有效且是root权限
如果TARGET_BUILD_VARIANT的值为userdebug时adb有效但是普通应用权限,当TARGET_BUILD_VARIANT的值为user时adb无效。
方法2:
简单而且最安全的方法就是不让adb编译到系统里,这需要修改android.mk文件来实现,只需修改编译adb模块的android.mk文件修改一下就可以,不让adb模块编译或不让其编译系统里。
方法3:
决定adb权限的几个变量:
ro.secure
ro.debuggable
persist.service.adb.enable
只看两个属性ro.secure,persist.service.adb.enable。当前是user模式的话,编译系统会把ro.secure置为1,把persist.service.adb.enable置为0.也就是说,用user模式编译出来的系统运行在安全模式下,adbd默认关闭。即使通过设置属性的方式打开,adbd进程的用户也是shell,不具有root权限。这样,普通用户或者开发者拿到一个机器后,通过PC运行adb shell时,是以shell用户登录机器的。
好了,现在把ro.secure置为0,再重新编译,只要设置属性persist.service.adb.enable的值为1,adbd进程就会以root用户的身份启动。