我使用adb和以下命令连接到我的活动设备:
C:\>adb -s HT829GZ52000 shell
$ ls
ls
sqlite_stmt_journals
cache
sdcard
etc
system
sys
sbin
proc
logo.rle
init.trout.rc
init.rc
init.goldfish.rc
init
default.prop
data
root
dev
$ cd data
cd data
$ ls
ls
opendir failed, Permission denied
我惊讶地发现,我的访问被拒绝了。为什么我不能像这样使用命令行浏览目录呢?
我如何获得我手机的根权限?
从API级别8 (Android 2.2)开始,对于可调试的应用程序(一直由Android Studio构建,除非发布版本被请求),你可以使用shell run-as命令作为特定用户/应用程序运行命令或可执行文件,或者只是切换到应用程序的UID,这样你就可以访问它的数据目录。
列出yourapp的目录内容:
run-as com.yourapp ls -l /data/data/com.yourapp
切换到com的UID。然后使用该uid运行所有后续命令(直到调用exit):
run-as com.yourapp
cd /data/data/com.yourapp
ls -l
exit
注1:部分HTC Desire手机存在已知问题。由于“/data/data”目录的属主/权限不规范,run-as命令无法在这些话机上运行。
注2:正如@Avio在评论中指出的那样:
run-as在任何版本(从7到10.1)运行Cyanogenmod的三星Galaxy S手机上也有问题,因为在这个平台上/data/data是到/datadata的符号链接。解决这个问题的一种方法是用实际目录替换符号链接(不幸的是,这通常需要根访问)。