使用adb时,为什么我会拒绝访问数据文件夹?

时间:2009-06-25 11:04:43

标签: android adb

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

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

如何在手机上获取超级用户权限?

14 个答案:

答案 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)

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

  1. 您需要拥有root权限的手机才能浏览Android手机上的数据文件夹。这意味着你要么拥有一个开发者设备({I {0}}或来自Google I / O的ADP1),要么你已经找到了一种以其他方式“根”你的手机的方法。
  2. 您需要以root模式运行ADB,执行以下操作: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)

以下是获取超级用户权限的两个步骤:

  1. 您的Android设备必须是root用户。
  2. 在ADB shell中,输入su并且android设备会提示y / n?你选择允许。

答案 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设备以任何方式植根(不确定它是否适用于非根植),则此方法有效。

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

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

答案 11 :(得分:0)

如果您只想查看数据库&amp;表格然后最常用的方法是使用Stetho。非常酷的工具,适用于SQLite使用Facobook developed buit的每位Android开发人员。

Steps to use the tool

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

    &#39;编译&#39; com.facebook.stetho:stetho:1.4.2&#39;

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

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

      chrome://inspect/#devices
      

      屏幕截图同样如下_

        

      ChromeInspact

      ChromeInspact

        

      您的数据库

      Your DB

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

答案 12 :(得分:-2)

没有生根设备可以通过以下方式访问文件 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. 4.访问文件,列出所有文件

    ls
    

    等等chang目录到任何其他像数据文件夹

    的地方
    cd data/data
    

答案 13 :(得分:-5)

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

su - root

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