我使用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
我很惊讶地看到我有访问被拒绝。为什么我不能使用这样的命令行浏览目录?
如何在手机上获取超级用户权限?
答案 0 :(得分:193)
从API级别8(Android 2.2)开始,对于可调试应用程序(除了请求发布版本之外,一直由Android Studio构建的应用程序),您可以使用shell run-as
命令来运行命令或作为特定用户/应用程序执行或只是切换到应用程序的 UID ,以便您可以访问其数据目录。
列出yourapp的目录内容:
run-as com.yourapp ls -l /data/data/com.yourapp
切换到 com.yourapp 的UID并使用该uid运行所有其他命令(直到您致电exit
):
run-as com.yourapp
cd /data/data/com.yourapp
ls -l
exit
注1 :有一些known issue与一些HTC Desire手机。由于/data/data
目录的非标准所有者/权限,run-as
命令无法在这些手机上运行。
注2 :正如@Avio的评论所指出:
run-as
在任何版本(从7到10.1)运行Cyanogenmod的三星Galaxy S手机也存在问题,因为在这个平台上/data/data
是/datadata
的符号链接。解决此问题的一种方法是将symlink替换为实际目录(遗憾的是,这通常需要root访问权限)。
答案 1 :(得分:130)
如果您想要浏览设备上的所有内容,则需要记住两件事。
adb root
答案 2 :(得分:41)
在我们开始之前你有 rooted 手机吗?如果没有,我强烈建议你跳跃的时候了。 99%的帮助你做这个的教程要求你有一个带根电话(我知道b / c我花了大约一个小时寻找一种方法,没有一个root电话..找不到任何.. )如果你考虑一下,你的iPhone也必须根植于同样的任务。所以这是完全合理的。更多关于在答案结束时生根的内容。
从命令行输入:
adb shell
这将你带到你的android shell命令行(你应该看到这样的东西:shell@android:/ $
现在输入:
shell@android:/ $run-as com.domain.yourapp
这应该直接带您到com.domain.yourapp
的数据目录:
shell@android:/data/data/com.domain.yourapp $
如果没有(例如,如果您收到错误),那么您可能没有root电话,或者您没有使用root用户权限。要使用您的root用户权限,请在adb命令行上键入su
,看看会发生什么,如果您收到错误,那么您的手机不是root。如果不是,请先将其设为root,然后继续执行这些说明。
从那里你可以输入ls
,你会看到所有目录,包括dbs:
shell@android:/data/data/com.domain.yourapp $ ls
cache
databases
lib
shared_prefs
之后你可以使用sqlite3来浏览dbase ..如果你没有安装它(你可以通过输入sqlite3
找到它,如果你得到command not found
那么你会有要安装它。要安装sqlite,请按照here说明进行操作。
关于生根:如果您以前从未植根过手机,并且担心它会弄坏您的手机,我可以完全放心地告诉您没有什么可担心的。有很多快速简便的手机生根教程,几乎所有的新旧机型,即使你有一个mac 你也可以根你的手机(我用我的mac根我的s3) 。
答案 3 :(得分:37)
$ adb shell
$ cd / data
$ ls
opendir失败,权限被拒绝
你应该这样做:
$ adb shell
$ cd /data
shell@android:/data $ run-as com.your.package
shell@android:/data/data/com.your.package $ ls
OK!
答案 4 :(得分:29)
当我尝试在有根的三星Galaxy S上操作时,我遇到了类似的问题。从计算机外壳发出命令
> adb root
失败并显示消息“无法在生产版本中以root身份运行”。这是一个允许成为root的简单方法。
而不是前一个,一个接一个地发出以下两个命令
> adb shell
$ su
在第一个命令之后,如果提示已从'>'更改如上所示为'$',表示您已进入adb shell环境。如果随后在发出第二个命令后提示已更改为“#”,则表示您现在是root用户。现在,作为root用户,您可以使用您的设备执行任何操作。
要切换回'安全'shell,请发出
# exit
您将看到提示符'$'重新出现,这意味着您作为用户而不是root用户身在adb shell中。
答案 5 :(得分:19)
我也遇到了很多麻烦。我仍然不完全理解权限和root运行,但这对我(部分先前的答案之一)起作用,从/ data / data / [package name] /databases/my_db.db复制数据库文件。由于某种原因在shell中运行 shell root 或 su 不起作用,也没有复制db文件(我可以导航到目录),也没有 sqlite3的的。
所以,这很有效!在DOS命令提示符下:
C:\Program Files\Android\android-sdk\platform-tools>adb shell
1|shell@android:/ $ run-as de.vogella.android.locationapi.maps
run-as de.vogella.android.locationapi.maps
1|shell@android:/data/data/de.vogella.android.locationapi.maps $ cd /data
cd /data
shell@android:/data $ cd data
cd data
shell@android:/data/data $ cd de.vogella.android.locationapi.maps
cd de.vogella.android.locationapi.maps
shell@android:/data/data/de.vogella.android.locationapi.maps $ cd databases
cd databases
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $ ls
ls
bus_timetable_lines.db
bus_timetable_lines.db-journal
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $ cat bus
_timetable_lines.db > /sdcard/db_copy.db
bus_timetable_lines.db > /sdcard/db_copy.db <
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $exit ^
exit
shell@android:/ $ exit
exit
C:\Program Files\Android\android-sdk\platform-tools>
现在转到SDCARD目录并获取文件db_copy.db。即使这是隐藏的,但我设法通过电子邮件发送。回到Windows,我能够使用SQLite数据库浏览器打开db文件。 :)
答案 6 :(得分:3)
以下是获取超级用户权限的两个步骤:
答案 7 :(得分:2)
生产版本无法进入/ data / app
drwxrwx--- system cache 1970-01-01 08:00 cache
drwxrwxr-x root system 1970-01-01 08:00 mnt
drwxrwx--x system system 1970-01-01 08:15 data
可能需要更改权利所有者来操作它。
答案 8 :(得分:2)
问题可能是我们需要在最新的CM中的developnent选项中专门给出adb root访问权限。 这就是我所做的。
abc @ abc-L655:〜$ sudo adb kill-server
abc @ abc-L655:〜$ sudo adb root start-server *守护程序没有运行。现在从端口5037开始* *守护程序已成功启动*系统设置禁用root访问权限 - 在设置中启用 - &gt;发展方案
改变开发选项后......
abc@abc-L655:~$ sudo adb kill-server
abc@abc-L655:~$ sudo adb root start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
restarting adbd as root
abc@abc-L655:~$ adb shell
root@android:/ # ls /data/ .... good to go..
答案 9 :(得分:1)
如果您知道应用程序包,则可以cd
直接访问该文件夹..
例如cd data/data/com.yourapp
这将使您进入read/writable
目录,以便您可以根据需要更改文件。由于emulator
上的文件夹相同,您可以使用它来获取文件夹路径。
答案 10 :(得分:1)
如果您的Android设备以任何方式植根(不确定它是否适用于非根植),则此方法有效。
adb shell
-访问外壳程序su
-成为超级用户。您现在可以读取所有目录中的所有文件。
答案 11 :(得分:0)
如果您只想查看数据库&amp;表格然后最常用的方法是使用Stetho
。非常酷的工具,适用于SQLite
使用Facobook developed
buit的每位Android开发人员。
Steps to use the tool
&#39;编译&#39; com.facebook.stetho:stetho:1.4.2&#39;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Stetho.initializeWithDefaults(this); setContentView(R.layout.activity_main); }
现在,构建您的应用程序&amp;当应用程序运行时,您可以通过在URL中打开chrome来浏览您的应用程序数据库:
chrome://inspect/#devices
屏幕截图同样如下_
ChromeInspact
您的数据库
希望这对所有人都有帮助! :)
答案 12 :(得分:-2)
没有生根设备可以通过以下方式访问文件
cmd截图:
根据您的用户使用platform-tools文件夹中的cmd启动adb
cd C:\Users\YourUserName\AppData\Local\Android\sdk\platform-tools
它可以在另一个文件夹中取决于您安装它的位置。
显示工作设备。
adb devices
比如说命令的响应是
List of devices attached
0123456789ABCDEF device
编写命令
adb -s 0123456789ABCDEF shell "su"
它将在
中打开 root@theDeviceName:/ #
4.访问文件,列出所有文件
ls
等等chang目录到任何其他像数据文件夹
的地方cd data/data
答案 13 :(得分:-5)
当您在设备的shell目录中时。跑吧
su - root
然后您应该能够访问数据/文件夹。