201

我使用 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

我很惊讶地发现我的访问被拒绝了。为什么我不能像这样使用命令行浏览目录?

如何在手机上获得 root 访问权限?

4

15 回答 15

240

从 API 级别 8 (Android 2.2) 开始,对于可调试应用程序(Android Studio 一直构建的应用程序,除非请求发布构建),您可以使用 shellrun-as命令以特定用户/应用程序的身份运行命令或可执行文件或者只是切换到应用程序的UID,以便您可以访问其数据目录。

列出你的应用的目录内容:

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:某些 HTC Desire 手机存在一个已知问题/data/data由于目录的非标准所有者/权限,run-as命令无法在这些手机上运行。

注意 2:正如@Avio 评论中所指出的: run-as在任何版本(从 7 到 10.1)上运行 Cyanogenmod 的三星 Galaxy S 手机也存在问题,因为在这个平台上/data/data是指向/datadata. 解决问题的一种方法是用实际目录替换符号链接(不幸的是,这通常需要 root 访问权限)。

于 2011-10-10T11:35:15.340 回答
151

如果您想浏览设备上的所有内容,需要记住两件事。

  1. 您需要拥有具有 root 访问权限的手机才能浏览 Android 手机上的数据文件夹。这意味着您要么拥有开发设备(ADP1或来自 Google I/O 的ION),要么您已经找到了以其他方式“root”您的手机的方法。
  2. 您需要在 root 模式下运行 ADB,执行以下操作:adb root
于 2009-06-25T12:50:31.737 回答
57

在我们开始之前,你有一个已经root的手机吗?如果没有,我强烈建议你是时候跳起来了。99% 的教程可以帮助你做到这一点,要求你有一个 root 手机(我知道 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 用户权限,su请在 adb 命令行上键入并查看会发生什么,如果出现错误,则说明您的手机没有 root。如果不是,请先将其植根,然后继续这些说明。

从那里你可以输入ls,你会看到所有的目录,包括 dbs:

shell@android:/data/data/com.domain.yourapp $ ls

cache
databases
lib
shared_prefs   

之后sqlite3,您可以使用 sqlite3 浏览dbasecommand not found

关于root:如果您以前从未root过手机,并且担心它会搞砸您的手机,我可以充满信心地告诉您,没有什么可担心的。几乎所有新旧型号都有大量快速简便的手机生根教程,即使你有一个mac,你也可以生根你的手机(我用我的mac植根了我的s3)。

于 2013-06-25T13:25:19.423 回答
52

$亚行外壳

$ cd /数据

$ ls

opendir 失败,权限被拒绝


你应该做这个:

$ adb shell

$ cd /data

shell@android:/data $ run-as com.your.package 

shell@android:/data/data/com.your.package $ ls

好的!

于 2015-03-06T03:13:32.467 回答
31

尝试在有根的三星 Galaxy S 上操作时遇到了类似的问题。从计算机外壳发出命令

> adb root

失败并显示消息“无法在生产构建中以 root 身份运行”。这是一个允许成为root的简单方法。

代替上一个,依次发出以下两个命令

> adb shell
$ su

在第一个命令之后,如果提示已经从'>'变成了'$',如上图,说明你进入了adb shell环境。如果随后在发出第二个命令后提示符变为“#”,则表示您现在是 root。现在,作为 root,您可以使用您的设备做任何您想做的事情。

要切换回“安全”外壳,请发出

# exit

您将看到提示“$”重新出现,这意味着您在 adb shell 中是作为用户而不是 root。

于 2012-04-05T12:49:55.060 回答
19

我也遇到了很多麻烦。我仍然不完全理解权限和 root 运行,但这对我有用(部分以前的答案之一)从 /data/data/[package name]/databases/my_db.db 复制数据库文件。由于某种原因在 shell 中运行shell rootsu不起作用,复制 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 文件。:)

于 2012-05-11T18:24:15.670 回答
3

以下是获得root访问权限的两个步骤:

  1. 您的 android 设备必须植根。
  2. 在 ADB shell 中,输入 su,android 设备会提示 y/n? 你选择允许。
于 2012-10-08T11:45:19.563 回答
3

如果您的 Android 设备以任何方式植根(不确定它是否适用于非植根),则此方法有效。

  1. adb shell- 访问外壳
  2. su- 成为超级用户。

您现在可以读取所有目录中的所有文件。

于 2020-06-24T10:57:18.343 回答
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

可能需要更改权利所有者才能操作它。

于 2011-01-07T02:23:22.310 回答
2

问题可能是我们需要在最新的 CM 的开发选项中专门授予 adb root 访问权限。这就是我所做的。

abc@abc-L655:~$ sudo adb kill-server
abc@abc-L655:~$ sudo adb root start-server * 守护程序未运行。现在在端口 5037 上启动它 * * 守护进程已成功启动 * 系统设置禁用了 root 访问权限 - 在设置中启用 -> 开发选项

更改开发选项后...

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.. 
于 2013-06-02T02:01:27.603 回答
1

如果您知道应用程序包,您可以cd直接到该文件夹​​..

例如 cd data/data/com.yourapp

这会将您放入一个目录,read/writable以便您可以根据需要更改文件。由于文件夹在 上是相同的emulator,因此您可以使用它来获取文件夹路径。

于 2009-12-31T10:50:49.483 回答
1

如果您只想查看您的数据库和表,那么最简单的方法是使用Stetho. SQLite对于每个使用buit by 的Android 开发人员来说,这是一个非常酷的工具Facobook developed

Steps to use the tool

  1. 在应用程序的 gradle 文件中添加以下依赖项(模块:app)

'编译'com.facebook.stetho:stetho:1.4.2'

  1. 在您的 Activity onCreate() 方法中添加以下代码行
@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 Stetho.initializeWithDefaults(this);
 setContentView(R.layout.activity_main);
 }

现在,构建您的应用程序,当应用程序运行时,您可以通过在 url 中打开 chrome 浏览您的应用程序数据库:

chrome://inspect/#devices

相同的截图如下_

铬检查

铬检查

你的数据库

你的数据库

希望这对所有人都有帮助!:)

于 2017-12-18T15:55:17.477 回答
0
  1. 你的手机应该已经root了。这是重要的一步!
  2. 转到 adb 文件位置并在该位置以管理员身份启动命令提示符
  3. 运行以下命令: adb shell run-as com.domain.yourapp 这将询问您手机上的 root 访问权限,允许它。
  4. 您将能够使用根访问权限浏览文件。谢谢!
于 2021-09-19T12:37:03.667 回答
-5

当您在设备的 shell 目录中时。赶紧跑

su - root

然后您应该能够访问 data/ 文件夹。

于 2013-10-02T11:26:03.057 回答
-6

无需root设备,您可以通过以下cmd屏幕截图访问文件:

  1. 根据您的用户,使用 platform-tools 文件夹中的 cmd 启动 adb

    cd C:\Users\YourUserName\AppData\Local\Android\sdk\platform-tools
    

    它可以在另一个文件夹中,具体取决于您安装它的位置。

  2. 显示工作设备。

    adb devices
    

    比如说响应操作系统的命令是

    List of devices attached
    0123456789ABCDEF     device
    
  3. 写命令

        adb -s 0123456789ABCDEF shell "su"
    

    它会在

        root@theDeviceName:/ #
    

4.访问文件,列出所有文件

ls

等等 chang 目录到任何其他地方,比如数据文件夹

cd data/data
于 2017-04-16T22:34:52.853 回答