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

时间:2012-10-22 06:56:27

标签: android android-emulator android-sqlite adb

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

我可以借助sqlite manager

从Eclipse中的AVD访问此文件

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

所以这是我的问题:如何访问我的Android手机中的data/data/.....目录“而不是生根”?

我可以更改目录data/data.....的用户权限而无需生根吗?

18 个答案:

答案 0 :(得分:329)

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

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

    adb shell
    run-as com.your.packagename 
    cp /data/data/com.your.packagename/
    
  2. 您也可以使用Android的备份功能。

    adb backup -noapk com.your.packagename
    

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

答案 1 :(得分:95)

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

  1. 点击查看> 工具Windows > 设备文件资源管理器
  2. 展开 / data / data / [package-name] 节点。
  3. 您只能展开在非root设备上以调试模式运行的软件包。

    Steps followed in Android Studio 3.0

答案 2 :(得分: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”以获取所需文件
  8. 在此之后,您应该能够浏览有根设备上的文件。

答案 3 :(得分:21)

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

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

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

答案 4 :(得分:12)

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

adb exec-out run-as package.name cat databases/file > file

答案 5 :(得分: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。

答案 6 :(得分:10)

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

另一种方法是通过adb

拉取文件
adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard

答案 7 :(得分:4)

我曾经遇到过同样的问题。除了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) {

    }
}

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

答案 8 :(得分:4)

rooted 设备上,正确的解决方案是:

Open cmd
Change your directory and go into 'Platform tools'
Type 'adb shell'
su
Press 'Allow' on device
chmod 777 /data /data/data /data/data/*
Open DDMS view in Eclipse/IntelliJ and from there open 'FileExplorer' to get your desired file

原始解决方案有效,但chmod将返回未知目录。将chmod命令更改为/ data / data / *可以从Intellij中的DDMS访问数据目录中的所有子文件夹。我假设Eclipse DDMS也是如此。

<强>更新 所以,我发现的很奇怪。我在IntelliJ(Android设备监视器)中使用DDMS运行Nexus 6。我已经构建了一个小启动应用程序。所述应用程序将数据保存到data / data / com.example.myapp / files

中的.csv文件

当我第一次尝试在Nexus 6上访问此文件时,我发现我必须根设备..我可以看到数据文件夹,但尝试打开它是行不通的。正如在其他地方在网上提到的那样,扩展+将会消失,然后很快再次出现(请注意,网络上有解决方案声称允许访问这些文件夹而无需生根,我发现它们为时已晚,而且我是不知道我是否还是不想root((我宁愿能够手动完成而不是依赖应用程序或命令提示符来提供我的解决方案)))。我扎根我的6并再次尝试DDMS。

此时,它向我展示了数据文件夹,我可以展开文件夹并查看com。目录,但我无法打开它们中的任何一个。那是我发现上述解决方案的时候。初始说明不适用于此部分:

chmod 777 /data /data/data /data/data/com.application.pacakage /data/data/com.application.pacakage/*

那时我尝试了我发布的解决方案:

chmod 777 /data /data/data /data/data/*

该解决方案似乎有效,但仅适用于某些文件夹。我现在可以扩展myapp文件夹,但无法扩展其中的files目录。

此时,我玩了一会儿,然后想出为什么不在我需要的目录上尝试它而不是尝试这些通配符条目。

chmod 777 /data /data/data /data/data/com.example.myapp/*

其次是:

chmod 777 /data /data/data /data/data/com.example.myapp/files

这些命令允许我展开并查看应用程序目录中的文件,以确认.csv是否正确保存。

希望这有助于某人。我挣扎了几个小时!

(稍微复杂一点,奇怪的是,权限没有传递给传递给files目录的.csv文件。我的文件目录权限读取drwxrwxrwx和我的log.csv文件权限读取-rw-rw ---- ..只是fyi)

答案 9 :(得分:3)

从Android备份到桌面

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

的原因

提取* .ab文件

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

答案 10 :(得分:1)

一种简单的方法是在SD卡上创建数据库。因为您无法访问内部存储器中的手机数据文件夹,除非您使用手机。那么为什么不简单地在SD卡上创建数据库呢。

此外,如果需要,您可以编写一些文件复制代码,将现有数据库文件(从内部存储器)复制到外部存储器,而无需任何根。

答案 11 :(得分:1)

adb backup对我不起作用,所以这就是我所做的(小米Redmi Note 4X,Android 6.0):
1.转到设置&gt;其他设置&gt;备份&amp;重置&gt;本地备份
2.点击屏幕底部的“备份” 3.取消选中“系统”和“应用”复选标记 4.点击“应用”单元格右侧的详细信息披露按钮,导航到应用选择屏幕 5.选择所需的应用程序,然后点击确定 6.备份完成后,需要以某种方式定位实际文件。可以在 / MIUI / backup / AllBackup / _FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE _ 找到我的。
7.然后我按照this answer RonTLV的步骤将实际转换备份文件(在我的情况下为.bak)转换为tar(与原始答案重复):

a)到这里下载:https://sourceforge.net/projects/adbextractor/
b)提取下载的文件并导航到解压缩的文件夹 c)使用您自己的文件名运行:java -jar abe.jar unpack c:\ Intel \ xxx.ab c:\ Intel \ xxx.tar

答案 12 :(得分:0)

可能是访问此文件夹,您需要管理权限。

所以你有两个选择: -

  1. root您的设备,而不是尝试访问此文件夹
  2. 使用模拟器
  3. P.S。 :如果您使用以上两个选项中的任何一个,则可以按照以下步骤访问此文件夹

      

    打开DDMS视角 - &gt;您的设备 - &gt;(从中选择文件资源管理器)   右窗口选项)选择包 - &gt;数据 - &gt;数据 - &gt;包裹名字    - &GT;文件

    从那里你可以提取你的文件

答案 13 :(得分:0)

您可以将此db文件复制到eclipse资源管理器中的某个位置(例如:sdcard或PC),并且可以使用sqlite访问和更新此db文件。

答案 14 :(得分:0)

问题是:如何访问-data-data-data-folder-in-android-device?

如果android-device是Bluestacks * Root Browser APK显示数据/数据/..

尝试下载Root Browser 从 https://apkpure.com/root-browser/com.jrummy.root.browserfree

如果文件是文本文件 你需要点击“打开为”,“文本文件”,“打开为”,“RB文本编辑器”

答案 15 :(得分:0)

您也可以尝试将文件复制到SD卡文件夹,这是一个公共文件夹,然后您可以将文件复制到PC,您可以使用sqlite访问它。

以下是一些可用于将文件从数据/数据复制到公共存储文件夹的代码:

a*(b + c)

清单:

private void copyFile(final Context context) {
    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath =
                    context.getDatabasePath(DATABASE_NAME).getAbsolutePath();

            String backupDBPath = "data.db";

            File currentDB = new File(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) {
        e.printStackTrace();
    }
}

答案 16 :(得分:0)

您可以下载类似的单文件:

self.view.window!.rootViewController?.dismiss(animated: true, completion: { print("All controller dismissed successfully..") })

在下载之前,您可能不需要看一下App-Directory中的文件结构。为此,请执行以下THelper注意的步骤:

adb exec-out run-as debuggable.app.package.name cat files/file.mp4 > file.mp4

Shahidul提及(<https://stackoverflow.com/a/44089388/1256697)的 Android-Studio 方法也可以使用。对于那些在菜单中没有看到adb shell run-as com.your.packagename cd files ls -als . 选项的用户:请确保在Android Studio中打开/ android-Directory。 例如。 react-native用户将其 Project-Folder 内部放在与/ ios-Directory相同的级别上。

答案 17 :(得分:0)

SQLlite数据库存储在用户的手机上,并且隐藏在路径下:

/Data/Data/com.companyname.AppName/File/

您在这里有2个选择:

  1. 您可以启动手机,以便访问查看隐藏的内容 db3文件
  2. 这不是解决方案,而是解决方法。为什么不只是创建测试 使用“选择”语句在其中显示数据库表的页面。