解决Android Studio上安卓模拟器root权限和使用adb shell时无法使用su命令的问题(/system/bin/sh: su: not found)

起初只是想根据相关自学教程尝试一下使用LitePal。
在添加数据后想进入自带的sqlite3数据库中查看数据时,
需要打开adb shell进入/data/data/[包名]/databases目录,
却发现在使用cd命令进入[包名]目录是,出现找不到目录的提示,
在data目录下使用ls命令时提示permission denied,权限被拒绝,得知是由于权限不足的原因导致的。
在查询相关资料后,才得知如果进入adb shell时,前缀是类似:

@generic_x86:/ $

最后是一个美元符号$,则表示不是以root身份运行。如果前缀是类似:

root@generic_x86:/ #

最后是一个井号#,则表示是以root身份运行。

如果没有root,要使用root权限,则需要执行su命令,但执行后出现提示:

/system/bin/sh: su: not found

找不到su命令
其实并不是找不到,只是因为没有root权限,也执行不了su命令
那么也就是说,在没有root权限的情况下要切换到root状态也需要root权限,这进入了权限许可逻辑的死循环。
于是,我们要跳出解决权限问题的思维!

解决方法:

我一开是采用的Android Studio安卓模拟器的版本是根据所学习的教程推荐的Android 7.0。
但是,Android 7.0的模拟器是没有root权限的!
所以只需要重新安装一个非Android 7.0版本的模拟器,如Android 6.0,或者连接一台获得了root权限的安卓设备
运行后会发现,当进入adb shell后,命令提示符里前缀就已经变成了:

root@generic_x86:/ #

带有root权限的adb shell
那也就不需要su命令了,可以直接访问所有的文件,问题就解决了。


其他问题:

在使用adb的时候,有时候会遇到在命令提示符打不开adb shell的情况,提示:

adb sever is out of date.killing

则有可能是你打开了两个adb,Android Studio在运行安卓模拟器时,会自行初始化并打开adb。如果此时你再手动打开adb shell,会出现两个adb抢占5037端口,导致两个都不能使用的问题。

那么我的解决方法比较简单粗暴:

重启电脑再打开Android Studio,并且只用AS里自带的Terminal命令控制符打开adb shell,尚可解决

欢迎交流讨论

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,144评论 25 709
  • 从外归来,到酒中门口。看见很多很多的家长,拥在校门口守候,等下晚自习的孩子出来。 晚上这个时间到门口来得很少。没想...
    行吟斯基阅读 5,852评论 21 19
  • 那是一个大雪纷飞的夜晚,我躺在床上,手捧一本心爱的书,陷入了深深的回忆中…… 我出生的那个年代,各种物资都不怎么流...
    天雨琦缘阅读 2,563评论 0 1
  • 挥手告别2016,12月31日晚,我的跨年就在不断调整17年的目标、1月份的计划、第一周的安排以及永澄大大昨晚发的...
    念小娜阅读 5,049评论 2 10
  • 保险的知识很多很多,越是想一下子就知道,反而做不到,不如每天积累一点,来的轻松,实际上,我一直有个想法,就是每天能...
    和自己较个劲阅读 1,441评论 0 0

友情链接更多精彩内容