如何访问Android设备中的数据/数据文件夹?

Nav*_*e P 293 android adb android-emulator android-sqlite

我正在开发一个应用程序,我知道我的数据库 *.db将出现在data/data/com.****.***

我可以借助sqlite manager从Eclipse中的AVD访问此文件

但我无法在Android手机中访问此文件.
我谷歌它,它说我需要根我的手机来做它,但我不想这样做.(新手机,保修问题和安全问题)

所以这是我的问题:如何data/data/.....没有生根的情况下访问Android手机中的目录 "?

我可以在data/data.....不生根的情况下更改目录的用户权限吗?

THe*_*per 353

直接在手机上访问文件很困难,但您可以将它们复制到计算机上,在计算机上可以随意执行任何操作.没有root,你有2个选择:

  1. 如果应用程序是可调试的,您可以run-as在adb shell中使用该命令

    adb shell
    run-as com.your.packagename 
    cp /data/data/com.your.packagename/
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者,您可以使用Android的备份功能.

    adb backup -noapk com.your.packagename
    
    Run Code Online (Sandbox Code Playgroud)

    现在将提示您"解锁设备并确认备份操作".最好不要提供密码,否则读取数据会变得更加困难.只需点击"备份我的数据"即可.您计算机上生成的"backup.ab"文件包含android备份格式的所有应用程序数据.基本上它是一个压缩的tar文件.本页介绍了如何使用OpenSSL的zlib命令解压缩它.您可以使用该 adb restore backup.db命令恢复备份.

  • 使用此命令解压缩备份文件:`dd if = backup.ab bs = 24 skip = 1 | openssl zlib -d> backup.tar` (20认同)
  • `adb backup -f\location\on\local\drive -noapk app.package.name`在没有root的情况下为我工作 (14认同)
  • 在选项1中,如何告诉cp命令将它们保存到我的笔记本电脑(Mac)?如果你给出一个Win的例子,我也想知道,并且只是翻译它.谢谢. (10认同)
  • **重要:**运行`adb backup -noapk com.your.packagename`会将ab文件保存在*current目录*中,因此请确保已在正确的目录中导航(例如`cd Desktop..`) (10认同)
  • 请注意,如果您的应用通过清单中的android:allowBackup =“ false”禁用了备份,则备份方法将产生一个空备份。 (4认同)
  • *run-as com.your.packagename* 命令正在运行。对我说未知的包名称 (2认同)
  • 有了备份文件后,您可以在命令行上使用以下命令对其进行解压缩,在Mac上对我有用,删除引号“(printf” \ x1f \ x8b \ x08 \ x00 \ x00 \ x00 \ x00 \ x00“;尾- c +25 backup.ab)| tar xfvz-“ (2认同)
  • 使用选项 2 我的备份有 41 个字节,在使用 Andorid Backup Extractor 后它会产生损坏的 tar。 (2认同)

Sha*_*dul 108

如果您使用的是Android Studio 3.0或更高版本,请按照以下步骤操作.

  1. 点击查看 > 工具窗口 > 设备文件浏览器.
  2. 展开/ data/data/[package-name]节点.

您只能展开在非root设备上以调试模式运行的程序包.

Android Studio 3.0中遵循的步骤

  • 这仅适用于调试模式,不适用于发布版本 (2认同)
  • 这太棒了。希望我早点知道这一点。 (2认同)

She*_*lji 59

您还可以尝试使用root explorer app获取数据库.如果这不起作用,那么你可以试试这个:

  1. 打开cmd
  2. 更改目录并进入"平台工具"
  3. 输入' adb shell'
  4. su
  5. 在设备上按"允许"
  6. chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
  7. 在Eclipse中打开DDMS视图,然后打开"FileExplorer"以获取所需的文件

在此之后,您应该能够浏览有根设备上的文件.

  • 无法chmod/data:不允许操作 (5认同)
  • 我认为root explore app仅适用于root手机.我会尝试第二种方法 (2认同)

Ani*_*han 21

要执行上述任何操作(即从手机本身访问受保护的文件夹),您仍需要root.(包括更改/ data文件夹的安装权限并访问它)

如果没有root,则无法通过代码应用程序/data直接访问以进行读取.因此,您可以尝试将该文件复制到SD卡或可访问的位置,然后,您应该能够正常访问它.

如果您有开发人员设备,生根不会使您的保修失效.对不起,AFAIK没有任何其他方式.


Ale*_* P. 13

/data/data/package.name/databases/file在未经验证的Android 5.0+设备上从可调试应用程序文件夹(例如)中提取文件的最简单方法(只需一个简单步骤)就是使用以下命令:

adb exec-out run-as package.name cat databases/file > file
Run Code Online (Sandbox Code Playgroud)


Isu*_*ghe 11

  1. 打开命令提示符
  2. 将目录更改为E:\ Android\adt-bundle-windows-x86_64-20140702\adt-bundle-windows-x86_64-20140702\sdk\platform-tools
  3. 输入以下命令
  4. adb -d shell
  5. run-as com.your.packagename cat databases/database.db > /sdcard/database.db
  6. 将目录更改为cd /sdcard确保database.db存在.
  7. adb pull /sdcard/database.db 或者只是您可以从设备复制database.db.


Ngu*_*inh 10

在eclipse中使用文件资源管理器.选择Windows =>显示视图=>其他... =>文件资源管理器.

另一种方法是通过adb拉取文件:

adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard
Run Code Online (Sandbox Code Playgroud)


Ron*_*TLV 6

从 Android 备份到桌面

打开命令行 cmd 并运行: adb backup -f C:\Intel\xxx.ab -noapk your.app.package。不要输入密码并单击备份我的数据。确保不要保存在驱动器 C 根目录上。你可能会被拒绝。这就是我保存在 C:\Intel 上的原因。

提取 *.ab 文件

  1. 去这里下载:https : //sourceforge.net/projects/adbextractor/
  2. 解压缩下载的文件并导航到解压缩的文件夹。
  3. 使用您自己的文件名运行它:java -jar abe.jar unpack c:\Intel\xxx.ab c:\Intel\xxx.tar


小智 5

我曾经也遇到过同样的问题。除了adb shell或rooting device,无法在android设备中直接访问文件。

除了这些,还有02个替代方案:

1)

 public void exportDatabse(String databaseName)
   {
     try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+"";
            String backupDBPath = "backupname.db";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
        }
    } catch (Exception e) {

    }
}
Run Code Online (Sandbox Code Playgroud)

2)试试这个:https : //github.com/sanathp/DatabaseManager_For_Android